From: Stefano Rivera <stefanor@debian.org>
Date: Sat, 7 Oct 2017 12:27:26 +0200
Subject: Debian: Expose the multiarch tag used in C extension file names

Add _multiarch variable to sys.implementation, and MULTIARCH to
sysconfig variables.  Based on Debian's multiarch patch.

Forwarded: not-needed
Last-Modified: 2017-05-21
---
 lib-python/3/test/test_sysconfig.py    | 4 ++++
 lib_pypy/_sysconfigdata.py             | 1 +
 pypy/module/imp/importing.py           | 2 ++
 pypy/module/imp/interp_imp.py          | 3 +++
 pypy/module/imp/moduledef.py           | 2 ++
 pypy/module/imp/test/test_app.py       | 3 +++
 pypy/module/sys/app.py                 | 1 +
 pypy/module/sys/test/test_sysmodule.py | 6 ++++++
 8 files changed, 22 insertions(+)

diff --git a/lib-python/3/test/test_sysconfig.py b/lib-python/3/test/test_sysconfig.py
index fcdadcf..1588d4e 100644
--- a/lib-python/3/test/test_sysconfig.py
+++ b/lib-python/3/test/test_sysconfig.py
@@ -485,6 +485,10 @@ class MakefileTests(unittest.TestCase):
             'var6': '42/lib/python3.5/config-b42dollar$5-x86_64-linux-gnu',
         })
 
+    def test_multiarch_config_var(self):
+        multiarch = get_config_var('MULTIARCH')
+        self.assertIsInstance(multiarch, str)
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/lib_pypy/_sysconfigdata.py b/lib_pypy/_sysconfigdata.py
index 427b4e2..333b362 100644
--- a/lib_pypy/_sysconfigdata.py
+++ b/lib_pypy/_sysconfigdata.py
@@ -15,6 +15,7 @@ build_time_vars = {
     # for CPython
     "SOABI": '-'.join(so_ext.split('.')[1].split('-')[:2]),
     "SO": so_ext,  # deprecated in Python 3, for backward compatibility
+    'MULTIARCH': sys.implementation._multiarch,
     'CC': "cc -pthread",
     'CXX': "c++ -pthread",
     'OPT': "-DNDEBUG -O2",
diff --git a/pypy/module/imp/importing.py b/pypy/module/imp/importing.py
index eccce3e..4679ad6 100644
--- a/pypy/module/imp/importing.py
+++ b/pypy/module/imp/importing.py
@@ -24,6 +24,8 @@ SO = '.pyd' if _WIN32 else '.so'
 PYC_TAG = 'pypy%d%d' % CPYTHON_VERSION[:2]
 DEFAULT_SOABI_BASE = '%s-pp%d%d' % ((PYC_TAG,) + PYPY_VERSION[:2])
 
+_MULTIARCH = getattr(sys, 'implementation', sys)._multiarch
+
 # see also pypy_incremental_magic in interpreter/pycode.py for the magic
 # version number stored inside pyc files.
 
diff --git a/pypy/module/imp/interp_imp.py b/pypy/module/imp/interp_imp.py
index 7fb40ee..1582b65 100644
--- a/pypy/module/imp/interp_imp.py
+++ b/pypy/module/imp/interp_imp.py
@@ -134,3 +134,6 @@ def source_hash(space, magic, content):
         h >>= 8
     assert not h
     return space.newbytes(b"".join(res))
+
+def get_multiarch_tuple(space):
+    return space.newtext(importing._MULTIARCH)
diff --git a/pypy/module/imp/moduledef.py b/pypy/module/imp/moduledef.py
index 05b2418..f272439 100644
--- a/pypy/module/imp/moduledef.py
+++ b/pypy/module/imp/moduledef.py
@@ -29,6 +29,8 @@ class Module(MixedModule):
 
         'source_hash':     'interp_imp.source_hash',
         'check_hash_based_pycs': 'space.newtext("default")',
+
+        '_get_multiarch_tuple': 'interp_imp.get_multiarch_tuple',
         }
 
     appleveldefs = {
diff --git a/pypy/module/imp/test/test_app.py b/pypy/module/imp/test/test_app.py
index 4a10621..e25eb2a 100644
--- a/pypy/module/imp/test/test_app.py
+++ b/pypy/module/imp/test/test_app.py
@@ -343,3 +343,6 @@ class AppTestImpModule:
         import _imp
         assert _imp.check_hash_based_pycs == "default"
 
+    def test_get_multiarch(self):
+        import _imp
+        assert hasattr(_imp, '_get_multiarch_tuple')
diff --git a/pypy/module/sys/app.py b/pypy/module/sys/app.py
index c889b9e..c35c442 100644
--- a/pypy/module/sys/app.py
+++ b/pypy/module/sys/app.py
@@ -167,4 +167,5 @@ implementation = SimpleNamespace(
     version=sys.version_info,
     hexversion=sys.hexversion,
     cache_tag=_imp.get_tag(),
+    _multiarch=_imp._get_multiarch_tuple(),
     )
diff --git a/pypy/module/sys/test/test_sysmodule.py b/pypy/module/sys/test/test_sysmodule.py
index c22fd7f..5b6690f 100644
--- a/pypy/module/sys/test/test_sysmodule.py
+++ b/pypy/module/sys/test/test_sysmodule.py
@@ -222,6 +222,12 @@ class AppTestAppSysTests:
         import sys
         assert type(sys.flags.dev_mode) is bool
 
+    def test_sys_implementation_multiarch(self):
+        import sys
+        multiarch = sys.implementation._multiarch
+        assert isinstance(multiarch, str)
+
+
 class AppTestSysModulePortedFromCPython:
     spaceconfig = {
         "usemodules": ["struct"],
