mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
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>
This commit is contained in:
parent
7148293d96
commit
563bd5a4dc
3 changed files with 31 additions and 6 deletions
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue