On Tue, 2026-08-04 at 22:04 +0000, Alejandro Hernandez Samaniego via lists.openembedded.org wrote:python distutils/sysconfig.get_platform() falls back to distutils.util.get_platform() when the _PYTHON_HOST_PLATFORM environment variable is unset, and returns the *build host* arch. The result is baked into the produced wheel's filename (pkg-<ver>-cp3XX-cp3XX-<PLAT>.whl) and its <pkg>.dist-info/WHEEL metadata. Without this export, extension-module wheels tag themselves with whichever arch the autobuilder worker happens to have, which makes the resulting rpm non-reproducible across mixed-arch autobuilder pools. Since python 3.14 + wheel >=0.44 also rejects wheels with an empty platform tag ("Bad wheel filename"), the value has to be non-empty in every class scope. HOST_ARCH is class-scoped by bitbake (target/native/cross/nativesdk), so `linux-${HOST_ARCH}` covers every case with a single unconditional assignment. Setting per-class overrides to "" (as an earlier draft did) trips the wheel filename check and must be avoided. Pure-python wheels ignore _PYTHON_HOST_PLATFORM and remain tagged "any", so this change only affects wheels that ship compiled extensions (cffi, cryptography, numpy, bcrypt, markupsafe, psutil, rpds-py, websockets, ...). Assisted-by: AI - OpenAI Signed-off-by: Alejandro Hernandez <alhe@linux.microsoft.com> --- meta/classes-recipe/python_pep517.bbclass | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/meta/classes-recipe/python_pep517.bbclass b/meta/classes-recipe/python_pep517.bbclass index d6246af5c2..06b23d3cba 100644 --- a/meta/classes-recipe/python_pep517.bbclass +++ b/meta/classes-recipe/python_pep517.bbclass @@ -30,6 +30,22 @@ PEP517_INSTALL_PYTHON:class-native = "nativepython3" # pypa/installer option to control the bytecode compilation INSTALL_WHEEL_COMPILE_BYTECODE ?= "--compile-bytecode=0" +# Force the wheel's platform tag to reflect the target machine rather than the +# build host. Without this, extension-module wheels bake the build host's arch +# (e.g. linux_x86_64) into <pkg>.dist-info/WHEEL via distutils/sysconfig's +# get_platform(), which breaks reproducibility across autobuilder workers of +# different architectures. Pure-python wheels ignore this variable and remain +# tagged "any". +# +# HOST_ARCH is class-scoped by bitbake: +# - target: HOST_ARCH == TARGET_ARCH (reproducible across workers) +# - native: HOST_ARCH == BUILD_ARCH (matches worker arch, unpackaged) +# - cross: HOST_ARCH == BUILD_ARCH +# - nativesdk: HOST_ARCH == SDK_ARCH +# so a single expression covers every class without producing an empty tag +# (which python 3.14 + wheel >=0.44 rejects with "Bad wheel filename"). +export _PYTHON_HOST_PLATFORM = "linux-${HOST_ARCH}"The fix looks right, thanks! I'm not sure we need the 10+ lines of explanation from AI ;-) The commit message could be more concise too. We're seening way too much text being added by AI in general and it will make the codebase harder to understand in the long run :(. Cheers, Richard
I agree, I can send a v2 or just keep it in mind for next time, let me know. Cheers, Alejandro
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#242937): https://lists.openembedded.org/g/openembedded-core/message/242937 Mute This Topic: https://lists.openembedded.org/mt/120602086/4354175 Group Owner: openembedded-core+owner@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alhe@linux.microsoft.com] -=-=-=-=-=-=-=-=-=-=-=-