build-details.json is incorrect when using ./configure --with-build-python on a non-cross build
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
Description
Bug report
Bug description:
We noticed that python-build-standalone's build-details.json contains "platform": "" on non-cross builds.
I think I know why. For consistency (I think), python-build-standalone always uses ./configure --with-build-python on both cross builds and normal builds.
This causes configure.ac to do
PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(srcdir)/Lib _PYTHON_SYSCONFIGDATA_NAME=_sysconfigdata_$(ABIFLAGS)_$(MACHDEP)_$(MULTIARCH) _PYTHON_SYSCONFIGDATA_PATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`) '$with_build_python
(line 167 in 3.15.0a1), as opposed to PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' in the without-build-python case.
However, $_PYTHON_HOST_PLATFORM is only actually set to something in the cross-compile case (line 820 in 3.15.0a1), meaning that $PYTHON_FOR_BUILD is effectively doing _PYTHON_HOST_PLATFORM= python3.
The fact that this variable is an empty string, in turn, causes sysconfig.get_platform() to return an empty string:
$ uvx python3.15
Python 3.15.0a1 (main, Oct 14 2025, 21:28:08) [Clang 20.1.4 ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sysconfig
>>> sysconfig.get_platform()
'linux-x86_64'
>>> import os
>>> os.environ['_PYTHON_HOST_PLATFORM'] = ''
>>> sysconfig.get_platform()
''
which makes generate-build-details.py output an empty string.
Arguably this is two bugs: configure.ac should not set _PYTHON_HOST_PLATFORM to an empty string, and sysconfig should not misbehave if _PYTHON_HOST_PLATFORM is set to an empty string (and should treat that as equivalent to being unset). Or maybe only one of these is a bug and the other is intended behavior. Also, of course, generate-build-details.py could work around this itself. I'm happy to provide a PR for any or all of these given some feedback on which direction to take this.
This applies to 3.14+ (all versions with build-details.json). If it's helpful, here are our full build logs for 3.14 and 3.15 in GHA; expand the "Build" section and search for generate-build-details. I've patched generate-build-details.py with print(f"generate-build-details debug: {sysconfig=} {sysconfig.get_platform()=}", file=sys.stderr).
(FYI I am probably about to file another bug about build-details.json generation in a moment, which might have a related cause and influence what the fix should be. EDIT: was already reported, #136267, left some analysis there)
CPython versions tested on:
3.14
Operating systems tested on:
Linux
Linked PRs
- gh-142375
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Read configure.ac and generate-build-details.py, then inspect the reported _PYTHON_HOST_PLATFORM and sysconfig.get_platform() behavior for non-cross builds. Compare the 3.14 and 3.15 build logs and the related issue #136267. Done means non-cross builds produce a correct platform in build-details.json without regressing cross builds.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- build-system
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100