summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2022-05-27 17:05:44 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2022-05-28 18:38:02 +0100
commit012f2db86b96b35eaaefe7f9d33dd820e3a520ec (patch)
tree3e259fd3b8e1cf0f85c3ff7cf334cad4c6e852fa
parent14256b767026b5d2e6540b621f73203ef343e420 (diff)
downloadpoky-012f2db86b96b35eaaefe7f9d33dd820e3a520ec.tar.gz
python3: Ensure stale empty python module directories don't break the build
There are two issues inside importlib. Firstly, the modules are accessed in on disk order. This means behaviour seen on one system might not reproduce on another and is a real headache. Secondly, empty directories left behind by previous modules might be looked at. This has caused a long string of different issues for us. As a result, patch this to a behaviour which works for us. Upstream discussion can follow later, this is breaking builds for too many people to leave unpatched. [YOCTO #14816] (From OE-Core rev: e5944a38db513e033c3a3e9313267055f7254be7) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/recipes-devtools/python/python3/deterministic_imports.patch32
-rw-r--r--meta/recipes-devtools/python/python3_3.10.4.bb1
2 files changed, 33 insertions, 0 deletions
diff --git a/meta/recipes-devtools/python/python3/deterministic_imports.patch b/meta/recipes-devtools/python/python3/deterministic_imports.patch
new file mode 100644
index 0000000000..296b413cab
--- /dev/null
+++ b/meta/recipes-devtools/python/python3/deterministic_imports.patch
@@ -0,0 +1,32 @@
1There are two issues here. Firstly, the modules are accessed in on disk order. This
2means behaviour seen on one system might not reproduce on another and is a real headache.
3
4Secondly, empty directories left behind by previous modules might be looked at. This
5has caused a long string of different issues for us.
6
7As a result, patch this to a behaviour which works for us.
8
9Upstream-Status: Pending [need to talk to upstream to see if they'll take one or both fixes]
10Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
11
12
13Index: Python-3.10.4/Lib/importlib/metadata/__init__.py
14===================================================================
15--- Python-3.10.4.orig/Lib/importlib/metadata/__init__.py
16+++ Python-3.10.4/Lib/importlib/metadata/__init__.py
17@@ -819,7 +819,14 @@ class Lookup:
18 self.infos = FreezableDefaultDict(list)
19 self.eggs = FreezableDefaultDict(list)
20
21- for child in path.children():
22+ for child in sorted(path.children()):
23+ childpath = pathlib.Path(path.root, child)
24+ try:
25+ if childpath.is_dir() and not any(childpath.iterdir()):
26+ # Empty directories aren't interesting
27+ continue
28+ except PermissionError:
29+ continue
30 low = child.lower()
31 if low.endswith((".dist-info", ".egg-info")):
32 # rpartition is faster than splitext and suitable for this purpose.
diff --git a/meta/recipes-devtools/python/python3_3.10.4.bb b/meta/recipes-devtools/python/python3_3.10.4.bb
index 9f1b96b519..6bd3a6aba8 100644
--- a/meta/recipes-devtools/python/python3_3.10.4.bb
+++ b/meta/recipes-devtools/python/python3_3.10.4.bb
@@ -33,6 +33,7 @@ SRC_URI = "http://www.python.org/ftp/python/${PV}/Python-${PV}.tar.xz \
33 file://0001-sysconfig.py-use-platlibdir-also-for-purelib.patch \ 33 file://0001-sysconfig.py-use-platlibdir-also-for-purelib.patch \
34 file://0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch \ 34 file://0001-Lib-pty.py-handle-stdin-I-O-errors-same-way-as-maste.patch \
35 file://0001-setup.py-Do-not-detect-multiarch-paths-when-cross-co.patch \ 35 file://0001-setup.py-Do-not-detect-multiarch-paths-when-cross-co.patch \
36 file://deterministic_imports.patch \
36 " 37 "
37 38
38SRC_URI:append:class-native = " \ 39SRC_URI:append:class-native = " \