blob: 41cd0f9a81a1c6f98db5f93f1fa77ba836d808c1 [file] [log] [blame]
This is like python-2.7.10-cross-distutils.patch, but we update the sysconfig
module instead of the distutils.sysconfig module. Python ships two different
modules with strong overlap in functionality.
--- a/Lib/sysconfig.py
+++ b/Lib/sysconfig.py
@@ -20,10 +20,10 @@ __all__ = [
_INSTALL_SCHEMES = {
'posix_prefix': {
- 'stdlib': '{installed_base}/@@GENTOO_LIBDIR@@/python{py_version_short}',
- 'platstdlib': '{platbase}/@@GENTOO_LIBDIR@@/python{py_version_short}',
- 'purelib': '{base}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages',
- 'platlib': '{platbase}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages',
+ 'stdlib': '{installed_base}/{libdirname}/python{py_version_short}',
+ 'platstdlib': '{platbase}/{libdirname}/python{py_version_short}',
+ 'purelib': '{base}/{libdirname}/python{py_version_short}/site-packages',
+ 'platlib': '{platbase}/{libdirname}/python{py_version_short}/site-packages',
'include':
'{installed_base}/include/python{py_version_short}{abiflags}',
'platinclude':
@@ -61,10 +61,10 @@ _INSTALL_SCHEMES = {
'data': '{userbase}',
},
'posix_user': {
- 'stdlib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}',
- 'platstdlib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}',
- 'purelib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages',
- 'platlib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages',
+ 'stdlib': '{userbase}/{libdirname}/python{py_version_short}',
+ 'platstdlib': '{userbase}/{libdirname}/python{py_version_short}',
+ 'purelib': '{userbase}/{libdirname}/python{py_version_short}/site-packages',
+ 'platlib': '{userbase}/{libdirname}/python{py_version_short}/site-packages',
'include': '{userbase}/include/python{py_version_short}',
'scripts': '{userbase}/bin',
'data': '{userbase}',
@@ -414,11 +414,29 @@ def _generate_posix_vars():
with open('pybuilddir.txt', 'w', encoding='ascii') as f:
f.write(pybuilddir)
+def _get_sysconfigdata_module():
+ if '_PYTHON_PROJECT_BASE' not in os.environ and os.getenv('SYSROOT'):
+ lib_dir = get_path('platstdlib')
+ import glob
+ sysconfig_paths = glob.glob(os.path.join(lib_dir, f'_sysconfigdata_{sys.abiflags}_*.py'))
+ if sysconfig_paths:
+ import importlib.machinery
+ import types
+ assert len(sysconfig_paths) == 1, f'Found too many sysconfigdata modules: {sysconfig_paths}'
+ sysconfig_path = sysconfig_paths[0]
+ loader = importlib.machinery.SourceFileLoader('_sysconfigdata', sysconfig_path)
+ module = types.ModuleType(loader.name)
+ loader.exec_module(module)
+ return module
+
+ name = _get_sysconfigdata_name()
+ return __import__(name, globals(), locals(), ['build_time_vars'], 0)
+
+
def _init_posix(vars):
"""Initialize the module as appropriate for POSIX systems."""
# _sysconfigdata is generated at build time, see _generate_posix_vars()
- name = _get_sysconfigdata_name()
- _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0)
+ _temp = _get_sysconfigdata_module()
build_time_vars = _temp.build_time_vars
vars.update(build_time_vars)
@@ -544,10 +562,14 @@ def get_config_vars(*args):
# sys.abiflags may not be defined on all platforms.
_CONFIG_VARS['abiflags'] = ''
+ libdir = None
+ if '_PYTHON_PROJECT_BASE' not in os.environ and os.getenv('SYSROOT'):
+ abi = os.getenv('ABI')
+ libdir = os.getenv('LIBDIR_%s' % abi)
+ if not libdir:
+ libdir = '@@GENTOO_LIBDIR@@'
+ _CONFIG_VARS['libdirname'] = libdir
+
- if os.name == 'nt':
- _init_non_posix(_CONFIG_VARS)
- if os.name == 'posix':
- _init_posix(_CONFIG_VARS)
# For backward compatibility, see issue19555
SO = _CONFIG_VARS.get('EXT_SUFFIX')
if SO is not None:
@@ -600,6 +622,11 @@ def get_config_vars(*args):
srcdir = os.path.dirname(get_makefile_filename())
_CONFIG_VARS['srcdir'] = _safe_realpath(srcdir)
+ if os.name == 'nt':
+ _init_non_posix(_CONFIG_VARS)
+ if os.name == 'posix':
+ _init_posix(_CONFIG_VARS)
+
# OS X platforms require special customization to handle
# multi-architecture, multi-os-version installers
if sys.platform == 'darwin':