mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-29 03:04:38 +08:00
Update sysconfig from CPython 3.11.2
This commit is contained in:
1 parent
ad7544ce90
commit
76e295f606
1 file changed
+82
-34
Vendored
+82
-34
@@ -56,8 +56,53 @@ _INSTALL_SCHEMES = {
|
||||
'scripts': '{base}/Scripts',
|
||||
'data': '{base}',
|
||||
},
|
||||
# Downstream distributors can overwrite the default install scheme.
|
||||
# This is done to support downstream modifications where distributors change
|
||||
# the installation layout (eg. different site-packages directory).
|
||||
# So, distributors will change the default scheme to one that correctly
|
||||
# represents their layout.
|
||||
# This presents an issue for projects/people that need to bootstrap virtual
|
||||
# environments, like virtualenv. As distributors might now be customizing
|
||||
# the default install scheme, there is no guarantee that the information
|
||||
# returned by sysconfig.get_default_scheme/get_paths is correct for
|
||||
# a virtual environment, the only guarantee we have is that it is correct
|
||||
# for the *current* environment. When bootstrapping a virtual environment,
|
||||
# we need to know its layout, so that we can place the files in the
|
||||
# correct locations.
|
||||
# The "*_venv" install scheme is a scheme to bootstrap virtual environments,
|
||||
# essentially identical to the default posix_prefix/nt schemes.
|
||||
# Downstream distributors who patch posix_prefix/nt scheme are encouraged to
|
||||
# leave the following schemes unchanged
|
||||
'posix_venv': {
|
||||
'stdlib': '{installed_base}/{platlibdir}/python{py_version_short}',
|
||||
'platstdlib': '{platbase}/{platlibdir}/python{py_version_short}',
|
||||
'purelib': '{base}/lib/python{py_version_short}/site-packages',
|
||||
'platlib': '{platbase}/{platlibdir}/python{py_version_short}/site-packages',
|
||||
'include':
|
||||
'{installed_base}/include/python{py_version_short}{abiflags}',
|
||||
'platinclude':
|
||||
'{installed_platbase}/include/python{py_version_short}{abiflags}',
|
||||
'scripts': '{base}/bin',
|
||||
'data': '{base}',
|
||||
},
|
||||
'nt_venv': {
|
||||
'stdlib': '{installed_base}/Lib',
|
||||
'platstdlib': '{base}/Lib',
|
||||
'purelib': '{base}/Lib/site-packages',
|
||||
'platlib': '{base}/Lib/site-packages',
|
||||
'include': '{installed_base}/Include',
|
||||
'platinclude': '{installed_base}/Include',
|
||||
'scripts': '{base}/Scripts',
|
||||
'data': '{base}',
|
||||
},
|
||||
}
|
||||
|
||||
# For the OS-native venv scheme, we essentially provide an alias:
|
||||
if os.name == 'nt':
|
||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['nt_venv']
|
||||
else:
|
||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv']
|
||||
|
||||
|
||||
# NOTE: site.py has copy of this function.
|
||||
# Sync it when modify this function.
|
||||
@@ -66,8 +111,8 @@ def _getuserbase():
|
||||
if env_base:
|
||||
return env_base
|
||||
|
||||
# VxWorks has no home directories
|
||||
if sys.platform == "vxworks":
|
||||
# Emscripten, VxWorks, and WASI have no home directories
|
||||
if sys.platform in {"emscripten", "vxworks", "wasi"}:
|
||||
return None
|
||||
|
||||
def joinuser(*args):
|
||||
@@ -150,37 +195,38 @@ else:
|
||||
# unable to retrieve the real program name
|
||||
_PROJECT_BASE = _safe_realpath(os.getcwd())
|
||||
|
||||
if (os.name == 'nt' and
|
||||
_PROJECT_BASE.lower().endswith(('\\pcbuild\\win32', '\\pcbuild\\amd64'))):
|
||||
_PROJECT_BASE = _safe_realpath(os.path.join(_PROJECT_BASE, pardir, pardir))
|
||||
# In a virtual environment, `sys._home` gives us the target directory
|
||||
# `_PROJECT_BASE` for the executable that created it when the virtual
|
||||
# python is an actual executable ('venv --copies' or Windows).
|
||||
_sys_home = getattr(sys, '_home', None)
|
||||
if _sys_home:
|
||||
_PROJECT_BASE = _sys_home
|
||||
|
||||
if os.name == 'nt':
|
||||
# In a source build, the executable is in a subdirectory of the root
|
||||
# that we want (<root>\PCbuild\<platname>).
|
||||
# `_BASE_PREFIX` is used as the base installation is where the source
|
||||
# will be. The realpath is needed to prevent mount point confusion
|
||||
# that can occur with just string comparisons.
|
||||
if _safe_realpath(_PROJECT_BASE).startswith(
|
||||
_safe_realpath(f'{_BASE_PREFIX}\\PCbuild')):
|
||||
_PROJECT_BASE = _BASE_PREFIX
|
||||
|
||||
# set for cross builds
|
||||
if "_PYTHON_PROJECT_BASE" in os.environ:
|
||||
_PROJECT_BASE = _safe_realpath(os.environ["_PYTHON_PROJECT_BASE"])
|
||||
|
||||
def _is_python_source_dir(d):
|
||||
def is_python_build(check_home=None):
|
||||
if check_home is not None:
|
||||
import warnings
|
||||
warnings.warn("check_home argument is deprecated and ignored.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
for fn in ("Setup", "Setup.local"):
|
||||
if os.path.isfile(os.path.join(d, "Modules", fn)):
|
||||
if os.path.isfile(os.path.join(_PROJECT_BASE, "Modules", fn)):
|
||||
return True
|
||||
return False
|
||||
|
||||
_sys_home = getattr(sys, '_home', None)
|
||||
|
||||
if os.name == 'nt':
|
||||
def _fix_pcbuild(d):
|
||||
if d and os.path.normcase(d).startswith(
|
||||
os.path.normcase(os.path.join(_PREFIX, "PCbuild"))):
|
||||
return _PREFIX
|
||||
return d
|
||||
_PROJECT_BASE = _fix_pcbuild(_PROJECT_BASE)
|
||||
_sys_home = _fix_pcbuild(_sys_home)
|
||||
|
||||
def is_python_build(check_home=False):
|
||||
if check_home and _sys_home:
|
||||
return _is_python_source_dir(_sys_home)
|
||||
return _is_python_source_dir(_PROJECT_BASE)
|
||||
|
||||
_PYTHON_BUILD = is_python_build(True)
|
||||
_PYTHON_BUILD = is_python_build()
|
||||
|
||||
if _PYTHON_BUILD:
|
||||
for scheme in ('posix_prefix', 'posix_home'):
|
||||
@@ -192,6 +238,7 @@ if _PYTHON_BUILD:
|
||||
scheme['headers'] = scheme['include']
|
||||
scheme['include'] = '{srcdir}/Include'
|
||||
scheme['platinclude'] = '{projectbase}/.'
|
||||
del scheme
|
||||
|
||||
|
||||
def _subst_vars(s, local_vars):
|
||||
@@ -216,6 +263,11 @@ def _expand_vars(scheme, vars):
|
||||
if vars is None:
|
||||
vars = {}
|
||||
_extend_dict(vars, get_config_vars())
|
||||
if os.name == 'nt':
|
||||
# On Windows we want to substitute 'lib' for schemes rather
|
||||
# than the native value (without modifying vars, in case it
|
||||
# was passed in)
|
||||
vars = vars | {'platlibdir': 'lib'}
|
||||
|
||||
for key, value in _INSTALL_SCHEMES[scheme].items():
|
||||
if os.name in ('posix', 'nt'):
|
||||
@@ -245,6 +297,8 @@ def _get_preferred_schemes():
|
||||
|
||||
|
||||
def get_preferred_scheme(key):
|
||||
if key == 'prefix' and sys.prefix != sys.base_prefix:
|
||||
return 'venv'
|
||||
scheme = _get_preferred_schemes()[key]
|
||||
if scheme not in _INSTALL_SCHEMES:
|
||||
raise ValueError(
|
||||
@@ -389,7 +443,7 @@ def _parse_makefile(filename, vars=None, keep_unresolved=True):
|
||||
def get_makefile_filename():
|
||||
"""Return the path of the Makefile."""
|
||||
if _PYTHON_BUILD:
|
||||
return os.path.join(_sys_home or _PROJECT_BASE, "Makefile")
|
||||
return os.path.join(_PROJECT_BASE, "Makefile")
|
||||
if hasattr(sys, 'abiflags'):
|
||||
config_dir_name = f'config-{_PY_VERSION_SHORT}{sys.abiflags}'
|
||||
else:
|
||||
@@ -534,9 +588,9 @@ def get_config_h_filename():
|
||||
"""Return the path of pyconfig.h."""
|
||||
if _PYTHON_BUILD:
|
||||
if os.name == "nt":
|
||||
inc_dir = os.path.join(_sys_home or _PROJECT_BASE, "PC")
|
||||
inc_dir = os.path.join(_PROJECT_BASE, "PC")
|
||||
else:
|
||||
inc_dir = _sys_home or _PROJECT_BASE
|
||||
inc_dir = _PROJECT_BASE
|
||||
else:
|
||||
inc_dir = get_path('platinclude')
|
||||
return os.path.join(inc_dir, 'pyconfig.h')
|
||||
@@ -611,12 +665,9 @@ def get_config_vars(*args):
|
||||
|
||||
if os.name == 'nt':
|
||||
_init_non_posix(_CONFIG_VARS)
|
||||
_CONFIG_VARS['VPATH'] = sys._vpath
|
||||
if os.name == 'posix':
|
||||
_init_posix(_CONFIG_VARS)
|
||||
# For backward compatibility, see issue19555
|
||||
SO = _CONFIG_VARS.get('EXT_SUFFIX')
|
||||
if SO is not None:
|
||||
_CONFIG_VARS['SO'] = SO
|
||||
if _HAS_USER_BASE:
|
||||
# Setting 'userbase' is done below the call to the
|
||||
# init function to enable using 'get_config_var' in
|
||||
@@ -661,9 +712,6 @@ def get_config_var(name):
|
||||
|
||||
Equivalent to get_config_vars().get(name)
|
||||
"""
|
||||
if name == 'SO':
|
||||
import warnings
|
||||
warnings.warn('SO is deprecated, use EXT_SUFFIX', DeprecationWarning, 2)
|
||||
return get_config_vars().get(name)
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user