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':
