| diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py |
| index 941587b..fa0c0f0 100644 |
| --- 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,36 @@ def _generate_posix_vars(): |
| with open('pybuilddir.txt', 'w', encoding='ascii') as f: |
| f.write(pybuilddir) |
| |
| +def _get_sysconfigdata_module(): |
| + sysroot = os.getenv('SYSROOT') |
| + if '_PYTHON_PROJECT_BASE' not in os.environ and sysroot: |
| + lib_dir = get_path('platstdlib') |
| + import glob |
| + |
| + # If SYSROOT is defined in the environment use the sysconfigdata from |
| + # the libdir of that sysroot's Python installation. |
| + sysconfig_paths = glob.glob( |
| + os.path.join(sysroot, os.path.relpath(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 +569,14 @@ def get_config_vars(*args): |
| # sys.abiflags may not be defined on all platforms. |
| _CONFIG_VARS['abiflags'] = '' |
| |
| - if os.name == 'nt': |
| - _init_non_posix(_CONFIG_VARS) |
| - if os.name == 'posix': |
| - _init_posix(_CONFIG_VARS) |
| + 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 |
| + |
| # For backward compatibility, see issue19555 |
| SO = _CONFIG_VARS.get('EXT_SUFFIX') |
| if SO is not None: |
| @@ -574,6 +603,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': |