summaryrefslogtreecommitdiffstats
path: root/Lib/sysconfig.py
diff options
context:
space:
mode:
authorPetr Viktorin <encukou@gmail.com>2021-05-24 22:48:44 (GMT)
committerGitHub <noreply@github.com>2021-05-24 22:48:44 (GMT)
commit563bd5a4dcc6a26e47966cb66db64859902bce76 (patch)
treedc3fd08c08b22a95be0f0c2033a3e2d68a60b629 /Lib/sysconfig.py
parent7148293d96843ca868961313b00361504ec0c242 (diff)
downloadcpython-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.py12
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)