blob: 41cd0f9a81a1c6f98db5f93f1fa77ba836d808c1 [file] [log] [blame]
Mike Frysinger935ee6f2019-09-06 14:38:15 -04001This is like python-2.7.10-cross-distutils.patch, but we update the sysconfig
2module instead of the distutils.sysconfig module. Python ships two different
3modules 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':