summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/distutils/command/install.py22
-rw-r--r--Lib/sysconfig.py12
-rw-r--r--Misc/NEWS.d/next/Build/2021-05-24-03-31-17.bpo-41282.L8nP44.rst3
3 files changed, 31 insertions, 6 deletions
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py
index d33a889..26696cf 100644
--- a/Lib/distutils/command/install.py
+++ b/Lib/distutils/command/install.py
@@ -37,12 +37,19 @@ INSTALL_SCHEMES = {"unix_prefix": {}, "unix_home": {}, "nt": {}}
# Copy from sysconfig._INSTALL_SCHEMES
for key in SCHEME_KEYS:
- sys_key = key
- if key == "headers":
- sys_key = "include"
- INSTALL_SCHEMES["unix_prefix"][key] = sysconfig._INSTALL_SCHEMES["posix_prefix"][sys_key]
- INSTALL_SCHEMES["unix_home"][key] = sysconfig._INSTALL_SCHEMES["posix_home"][sys_key]
- INSTALL_SCHEMES["nt"][key] = sysconfig._INSTALL_SCHEMES["nt"][sys_key]
+ for distutils_scheme_name, sys_scheme_name in (
+ ("unix_prefix", "posix_prefix"), ("unix_home", "posix_home"),
+ ("nt", "nt")):
+ sys_key = key
+ sys_scheme = sysconfig._INSTALL_SCHEMES[sys_scheme_name]
+ if key == "headers" and key not in sys_scheme:
+ # On POSIX-y platofrms, Python will:
+ # - Build from .h files in 'headers' (only there when
+ # building CPython)
+ # - Install .h files to 'include'
+ # When 'headers' is missing, fall back to 'include'
+ sys_key = 'include'
+ INSTALL_SCHEMES[distutils_scheme_name][key] = sys_scheme[sys_key]
# Transformation to different template format
for main_key in INSTALL_SCHEMES:
@@ -316,6 +323,9 @@ class install(Command):
self.config_vars['userbase'] = self.install_userbase
self.config_vars['usersite'] = self.install_usersite
+ if sysconfig.is_python_build(True):
+ self.config_vars['srcdir'] = sysconfig.get_config_var('srcdir')
+
self.expand_basedirs()
self.dump_dirs("post-expand_basedirs()")
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)
diff --git a/Misc/NEWS.d/next/Build/2021-05-24-03-31-17.bpo-41282.L8nP44.rst b/Misc/NEWS.d/next/Build/2021-05-24-03-31-17.bpo-41282.L8nP44.rst
new file mode 100644
index 0000000..cc6eade
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2021-05-24-03-31-17.bpo-41282.L8nP44.rst
@@ -0,0 +1,3 @@
+Fix broken ``make install`` that caused standard library extension modules
+to be unnecessarily and incorrectly rebuilt during the install phase of
+cpython.