Mike Frysinger | 935ee6f | 2019-09-06 14:38:15 -0400 | [diff] [blame] | 1 | This is like python-2.7.10-cross-distutils.patch, but we update the sysconfig |
| 2 | module instead of the distutils.sysconfig module. Python ships two different |
| 3 | modules with strong overlap in functionality. |
| 4 | |
| 5 | --- a/Lib/sysconfig.py |
| 6 | +++ b/Lib/sysconfig.py |
| 7 | @@ -20,10 +20,10 @@ __all__ = [ |
| 8 | |
| 9 | _INSTALL_SCHEMES = { |
| 10 | 'posix_prefix': { |
| 11 | - 'stdlib': '{installed_base}/@@GENTOO_LIBDIR@@/python{py_version_short}', |
| 12 | - 'platstdlib': '{platbase}/@@GENTOO_LIBDIR@@/python{py_version_short}', |
| 13 | - 'purelib': '{base}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages', |
| 14 | - 'platlib': '{platbase}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages', |
| 15 | + 'stdlib': '{installed_base}/{libdirname}/python{py_version_short}', |
| 16 | + 'platstdlib': '{platbase}/{libdirname}/python{py_version_short}', |
| 17 | + 'purelib': '{base}/{libdirname}/python{py_version_short}/site-packages', |
| 18 | + 'platlib': '{platbase}/{libdirname}/python{py_version_short}/site-packages', |
| 19 | 'include': |
| 20 | '{installed_base}/include/python{py_version_short}{abiflags}', |
| 21 | 'platinclude': |
| 22 | @@ -61,10 +61,10 @@ _INSTALL_SCHEMES = { |
| 23 | 'data': '{userbase}', |
| 24 | }, |
| 25 | 'posix_user': { |
| 26 | - 'stdlib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}', |
| 27 | - 'platstdlib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}', |
| 28 | - 'purelib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages', |
| 29 | - 'platlib': '{userbase}/@@GENTOO_LIBDIR@@/python{py_version_short}/site-packages', |
| 30 | + 'stdlib': '{userbase}/{libdirname}/python{py_version_short}', |
| 31 | + 'platstdlib': '{userbase}/{libdirname}/python{py_version_short}', |
| 32 | + 'purelib': '{userbase}/{libdirname}/python{py_version_short}/site-packages', |
| 33 | + 'platlib': '{userbase}/{libdirname}/python{py_version_short}/site-packages', |
| 34 | 'include': '{userbase}/include/python{py_version_short}', |
| 35 | 'scripts': '{userbase}/bin', |
| 36 | 'data': '{userbase}', |
| 37 | @@ -414,11 +414,29 @@ def _generate_posix_vars(): |
| 38 | with open('pybuilddir.txt', 'w', encoding='ascii') as f: |
| 39 | f.write(pybuilddir) |
| 40 | |
| 41 | +def _get_sysconfigdata_module(): |
| 42 | + if '_PYTHON_PROJECT_BASE' not in os.environ and os.getenv('SYSROOT'): |
| 43 | + lib_dir = get_path('platstdlib') |
| 44 | + import glob |
| 45 | + sysconfig_paths = glob.glob(os.path.join(lib_dir, f'_sysconfigdata_{sys.abiflags}_*.py')) |
| 46 | + if sysconfig_paths: |
| 47 | + import importlib.machinery |
| 48 | + import types |
| 49 | + assert len(sysconfig_paths) == 1, f'Found too many sysconfigdata modules: {sysconfig_paths}' |
| 50 | + sysconfig_path = sysconfig_paths[0] |
| 51 | + loader = importlib.machinery.SourceFileLoader('_sysconfigdata', sysconfig_path) |
| 52 | + module = types.ModuleType(loader.name) |
| 53 | + loader.exec_module(module) |
| 54 | + return module |
| 55 | + |
| 56 | + name = _get_sysconfigdata_name() |
| 57 | + return __import__(name, globals(), locals(), ['build_time_vars'], 0) |
| 58 | + |
| 59 | + |
| 60 | def _init_posix(vars): |
| 61 | """Initialize the module as appropriate for POSIX systems.""" |
| 62 | # _sysconfigdata is generated at build time, see _generate_posix_vars() |
| 63 | - name = _get_sysconfigdata_name() |
| 64 | - _temp = __import__(name, globals(), locals(), ['build_time_vars'], 0) |
| 65 | + _temp = _get_sysconfigdata_module() |
| 66 | build_time_vars = _temp.build_time_vars |
| 67 | vars.update(build_time_vars) |
| 68 | |
| 69 | @@ -544,10 +562,14 @@ def get_config_vars(*args): |
| 70 | # sys.abiflags may not be defined on all platforms. |
| 71 | _CONFIG_VARS['abiflags'] = '' |
| 72 | |
| 73 | + libdir = None |
| 74 | + if '_PYTHON_PROJECT_BASE' not in os.environ and os.getenv('SYSROOT'): |
| 75 | + abi = os.getenv('ABI') |
| 76 | + libdir = os.getenv('LIBDIR_%s' % abi) |
| 77 | + if not libdir: |
| 78 | + libdir = '@@GENTOO_LIBDIR@@' |
| 79 | + _CONFIG_VARS['libdirname'] = libdir |
| 80 | + |
| 81 | - if os.name == 'nt': |
| 82 | - _init_non_posix(_CONFIG_VARS) |
| 83 | - if os.name == 'posix': |
| 84 | - _init_posix(_CONFIG_VARS) |
| 85 | # For backward compatibility, see issue19555 |
| 86 | SO = _CONFIG_VARS.get('EXT_SUFFIX') |
| 87 | if SO is not None: |
| 88 | @@ -600,6 +622,11 @@ def get_config_vars(*args): |
| 89 | srcdir = os.path.dirname(get_makefile_filename()) |
| 90 | _CONFIG_VARS['srcdir'] = _safe_realpath(srcdir) |
| 91 | |
| 92 | + if os.name == 'nt': |
| 93 | + _init_non_posix(_CONFIG_VARS) |
| 94 | + if os.name == 'posix': |
| 95 | + _init_posix(_CONFIG_VARS) |
| 96 | + |
| 97 | # OS X platforms require special customization to handle |
| 98 | # multi-architecture, multi-os-version installers |
| 99 | if sys.platform == 'darwin': |