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/__init__.py            | 2 ++
 pypy/module/imp/importing.py           | 2 ++
 pypy/module/imp/interp_imp.py          | 3 ++-
 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 b84fb68..9fa57a0 100644
--- a/lib-python/3/test/test_sysconfig.py
+++ b/lib-python/3/test/test_sysconfig.py
@@ -469,6 +469,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 2ceafe8..35d8ade 100644
--- a/lib_pypy/_sysconfigdata.py
+++ b/lib_pypy/_sysconfigdata.py
@@ -9,6 +9,7 @@ so_ext = _imp.extension_suffixes()[0]
 build_time_vars = {
     "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/__init__.py b/pypy/module/imp/__init__.py
index e85389b..1a6e747 100644
--- a/pypy/module/imp/__init__.py
+++ b/pypy/module/imp/__init__.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/importing.py b/pypy/module/imp/importing.py
index 1ffbca5..adcd2b6 100644
--- a/pypy/module/imp/importing.py
+++ b/pypy/module/imp/importing.py
@@ -26,6 +26,8 @@ DEFAULT_SOABI_BASE = '%s%d%d' % ((PREFIX,) + PYPY_VERSION[:2])
 
 PYC_TAG = '%s%d%d' % ((PREFIX,) + PYPY_VERSION[:2])   # 'pypy3-XY'
 
+_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/test/test_app.py b/pypy/module/imp/test/test_app.py
index e4a440e..9385335 100644
--- a/pypy/module/imp/test/test_app.py
+++ b/pypy/module/imp/test/test_app.py
@@ -316,3 +316,7 @@ class AppTestImpModule:
         if not hasattr(sys, 'pypy_version_info'):
             skip('This test is PyPy-only')
         assert imp.get_tag() == 'pypy3-%d%d' % sys.pypy_version_info[0:2]
+
+    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 7088976..b1e3e15 100644
--- a/pypy/module/sys/app.py
+++ b/pypy/module/sys/app.py
@@ -116,4 +116,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 fe3ccaa..3e0dcf3 100644
--- a/pypy/module/sys/test/test_sysmodule.py
+++ b/pypy/module/sys/test/test_sysmodule.py
@@ -224,6 +224,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 = {
