From: Stefano Rivera <stefanor@debian.org>
Date: Sat, 7 Oct 2017 12:27:26 +0200
Subject: 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       | 4 ++++
 pypy/module/sys/app.py                 | 1 +
 pypy/module/sys/test/test_sysmodule.py | 5 +++++
 8 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/lib-python/3/test/test_sysconfig.py b/lib-python/3/test/test_sysconfig.py
index fc6cda2..cfe0cf1 100644
--- a/lib-python/3/test/test_sysconfig.py
+++ b/lib-python/3/test/test_sysconfig.py
@@ -486,6 +486,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)
+
 
 def test_main():
     run_unittest(TestSysConfig, MakefileTests)
diff --git a/lib_pypy/_sysconfigdata.py b/lib_pypy/_sysconfigdata.py
index 64c37be..26e7e56 100644
--- a/lib_pypy/_sysconfigdata.py
+++ b/lib_pypy/_sysconfigdata.py
@@ -14,6 +14,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 bbe4264..8abbaae 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 1f3bf01..1d2a96f 100644
--- a/pypy/module/imp/interp_imp.py
+++ b/pypy/module/imp/interp_imp.py
@@ -122,4 +122,5 @@ def fix_co_filename(space, w_code, pathname):
     code_w = space.interp_w(PyCode, w_code)
     importing.update_code_filenames(space, code_w, pathname)
 
-
+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 e85389b..1a6e747 100644
--- a/pypy/module/imp/moduledef.py
+++ b/pypy/module/imp/moduledef.py
@@ -26,6 +26,8 @@ class Module(MixedModule):
         'release_lock':    'interp_imp.release_lock',
 
         '_fix_co_filename': 'interp_imp.fix_co_filename',
+
+        '_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 ea2c653..eb4afd6 100644
--- a/pypy/module/imp/test/test_app.py
+++ b/pypy/module/imp/test/test_app.py
@@ -327,3 +327,7 @@ class AppTestImpModule:
             sys.path.insert(0, u'\xef')
         with raises(ImportError):
             import impossible_module
+
+    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 00f914e..3825d47 100644
--- a/pypy/module/sys/app.py
+++ b/pypy/module/sys/app.py
@@ -136,4 +136,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 1fe9ec4..23903e0 100644
--- a/pypy/module/sys/test/test_sysmodule.py
+++ b/pypy/module/sys/test/test_sysmodule.py
@@ -209,6 +209,11 @@ class AppTestAppSysTests:
         assert isinstance(info.lock, (str, type(None)))
         assert isinstance(info.version, (str, type(None)))
 
+    def test_sys_implementation_multiarch(self):
+        import sys
+        multiarch = sys.implementation._multiarch
+        assert isinstance(multiarch, str)
+
 
 class AppTestSysModulePortedFromCPython:
     spaceconfig = {
