Description
Bug report
Bug description:
When doing cross-builds, the PEP-739 build-details.json
gets generated using inconsistent data, some of which based on the build python, and some from the target platform python.
See for example the following gist:
https://gist.github.com/itamaro/8f23ebec2e142fd7480241b76c16c4e0
The gist contains the build-details.json
generated for a 3.15 GIL-disabled build, using a 3.15 GIL-enabled build as the build-python.
Concretely:
cd ~/pybuild/python/main-default
./configure --with-pydebug
make -j
cd ~/pybuild/python/main-nogil
./configure --with-pydebug --disable-gil
make -j
# now use the GIL-enabled python to regenerate build-details.json for the nogil build
_PYTHON_PROJECT_BASE=. _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_td_darwin_darwin _PYTHON_SYSCONFIGDATA_PATH=build/lib.macosx-14.5-arm64-3.15 ~/pybuild/python/main-default/python.exe -E Tools/build/generate-build-details.py /tmp/build-details.json
Some examples from the gist:
Incorrect - abi.flags
is ["d"]
instead of ["t", "d"]
:
"abi": {
"flags": [
"d"
]
},
Correct - libpython.static
has the correct SOABI, including t
:
"libpython": {
"static": "/usr/local/lib/libpython3.15td.a"
},
Incorrect - suffixes.extensions
includes extensions for the GIL-enabled ABI:
"extensions": [
".cpython-315d-darwin.so",
".cpython-315-darwin.so",
".abi3.so",
".so"
]
Notes
I used a "cross-build" on the same MacOS host here, with GIL enabled vs GIL disabled, because it was the easiest for a full end-to-end repro on a single machine.
The issue is more general though, as I originally observed it when generating build-info.json
files for a MacOS-target runtime (both GIL enabled and disabled) using a Linux-GIL-enabled build-python. That setup is more involved, but the mixing is also more apparent, with some fields using "darwin" and other fields using "linux-gnu-x86_64" as the multiarch string.
CPython versions tested on:
CPython main branch, 3.15, 3.14
Operating systems tested on:
macOS, Linux