diff mbox series

python_hatchling: remove empty python sysroot dirs

Message ID 20230531190816.1656739-1-tgamblin@baylibre.com
State Accepted, archived
Commit 3ded8b83cebb6d2b9f9da1c0325148f8da4ed23b
Headers show
Series python_hatchling: remove empty python sysroot dirs | expand

Commit Message

Trevor Gamblin May 31, 2023, 7:08 p.m. UTC
In some cases, empty versioned directories are being left behind in
sysroots from previous versions of packages. This appears to be found
with recipes relying on hatchling, and causes errors at the do_compile
step:

|   File "/workspace/yocto/manual/openembedded-core/build/tmp-glibc/work/core2-64-oe-linux/python3-iniconfig/2.0.0-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/packaging/version.py", line 197, in __init__
|     match = self._regex.search(version)
|             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
| TypeError: expected string or bytes-like object, got 'NoneType'

To fix this error, add a do_prepare_recipe_sysroot postfunc in the
python_hatchling class that removes any nested empty directories from
the sysroots during build, so that dependent recipes don't get caught
on them.

Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
---
 meta/classes-recipe/python_hatchling.bbclass | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Richard Purdie May 31, 2023, 7:13 p.m. UTC | #1
On Wed, 2023-05-31 at 15:08 -0400, Trevor Gamblin wrote:
> In some cases, empty versioned directories are being left behind in
> sysroots from previous versions of packages. This appears to be found
> with recipes relying on hatchling, and causes errors at the do_compile
> step:
> 
> >   File "/workspace/yocto/manual/openembedded-core/build/tmp-glibc/work/core2-64-oe-linux/python3-iniconfig/2.0.0-r0/recipe-sysroot-native/usr/lib/python3.11/site-packages/packaging/version.py", line 197, in __init__
> >     match = self._regex.search(version)
> >             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > TypeError: expected string or bytes-like object, got 'NoneType'
> 
> To fix this error, add a do_prepare_recipe_sysroot postfunc in the
> python_hatchling class that removes any nested empty directories from
> the sysroots during build, so that dependent recipes don't get caught
> on them.
> 
> Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
> ---
>  meta/classes-recipe/python_hatchling.bbclass | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/meta/classes-recipe/python_hatchling.bbclass b/meta/classes-recipe/python_hatchling.bbclass
> index b9e6582eb5..a20e243161 100644
> --- a/meta/classes-recipe/python_hatchling.bbclass
> +++ b/meta/classes-recipe/python_hatchling.bbclass
> @@ -7,3 +7,12 @@
>  inherit python_pep517 python3native python3-dir setuptools3-base
>  
>  DEPENDS += "python3-hatchling-native"
> +
> +# delete nested, empty directories from the python site-packages path. We don't use 
> +# ${PYTHON_SITEPACKAGES_DIR} in the path specification so that python3-hatchling 
> +# still builds OK
> +hatchling_rm_emptydirs () {
> +        find ${RECIPE_SYSROOT_NATIVE}/usr/lib/${PYTHON_DIR}/site-packages/* -depth -type d -empty -delete
> +}
> +
> +do_prepare_recipe_sysroot[postfuncs] += " hatchling_rm_emptydirs"

Looking at the patch, this is the right direction I'm not 100%
convinced the details are quite right.

Should we be clearing from RECIPE_SYSROOT or RECIPE_SYSROOT_NATIVE?
Also, can we avoid hardcoding /usr/lib? That probably won't work for
multilibs or some other combinations of settings some use.

Cheers,

Richard
diff mbox series

Patch

diff --git a/meta/classes-recipe/python_hatchling.bbclass b/meta/classes-recipe/python_hatchling.bbclass
index b9e6582eb5..a20e243161 100644
--- a/meta/classes-recipe/python_hatchling.bbclass
+++ b/meta/classes-recipe/python_hatchling.bbclass
@@ -7,3 +7,12 @@ 
 inherit python_pep517 python3native python3-dir setuptools3-base
 
 DEPENDS += "python3-hatchling-native"
+
+# delete nested, empty directories from the python site-packages path. We don't use 
+# ${PYTHON_SITEPACKAGES_DIR} in the path specification so that python3-hatchling 
+# still builds OK
+hatchling_rm_emptydirs () {
+        find ${RECIPE_SYSROOT_NATIVE}/usr/lib/${PYTHON_DIR}/site-packages/* -depth -type d -empty -delete
+}
+
+do_prepare_recipe_sysroot[postfuncs] += " hatchling_rm_emptydirs"