diff options
author | Petr Viktorin <encukou@gmail.com> | 2021-05-24 22:48:44 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-24 22:48:44 (GMT) |
commit | 563bd5a4dcc6a26e47966cb66db64859902bce76 (patch) | |
tree | dc3fd08c08b22a95be0f0c2033a3e2d68a60b629 /Lib/sysconfig.py | |
parent | 7148293d96843ca868961313b00361504ec0c242 (diff) | |
download | cpython-563bd5a4dcc6a26e47966cb66db64859902bce76.zip cpython-563bd5a4dcc6a26e47966cb66db64859902bce76.tar.gz cpython-563bd5a4dcc6a26e47966cb66db64859902bce76.tar.bz2 |
bpo-41282: Fix broken `make install` (GH-26329)
A previous commit broke a check in sysconfig when building cpython itself.
This caused builds of the standard library modules to search a wrong
location (the installed location rather than the source directory) for
header files with the net effect that a ``make install``
incorrectly caused all extension modules to be rebuilt again and
with incorrect include file paths.
When building Python, we need two distinct "include" directories:
- source .h files
- install target for .h files
Note that this doesn't matter except when building Python from source.
Historically:
- source .h files were in the distutils scheme under 'include'
- the install directory was in the distutils.command.install scheme
under 'headers'
GH-24549 merged these; sysconfig is now the single source of truth and
distutils is derived from it.
This commit introduces a "secret" scheme path, 'headers', which contains
the install target. It is only present when building Python.
The distutils code uses it if present, and falls back to 'include'.
Co-authored-by: Ned Deily <nad@python.org>
Diffstat (limited to 'Lib/sysconfig.py')
-rw-r--r-- | Lib/sysconfig.py | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py index e8869af..730d33d 100644 --- a/Lib/sysconfig.py +++ b/Lib/sysconfig.py @@ -182,6 +182,18 @@ def is_python_build(check_home=False): _PYTHON_BUILD = is_python_build(True) +if _PYTHON_BUILD: + for scheme in ('posix_prefix', 'posix_home'): + # On POSIX-y platofrms, Python will: + # - Build from .h files in 'headers' (which is only added to the + # scheme when building CPython) + # - Install .h files to 'include' + scheme = _INSTALL_SCHEMES[scheme] + scheme['headers'] = scheme['include'] + scheme['include'] = '{srcdir}/Include' + scheme['platinclude'] = '{projectbase}/.' + + def _subst_vars(s, local_vars): try: return s.format(**local_vars) |