| |
@@ -0,0 +1,79 @@
|
| |
+ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
| |
+ From: Lumir Balhar <lbalhar@redhat.com>
|
| |
+ Date: Tue, 4 Aug 2020 12:04:03 +0200
|
| |
+ Subject: [PATCH] 00353: Original names for architectures with different names
|
| |
+ downstream
|
| |
+
|
| |
+ Pythons in RHEL/Fedora use different names for some architectures
|
| |
+ than upstream and other distros (for example ppc64 vs. powerpc64).
|
| |
+ See patch 274.
|
| |
+ That means that an extension built with the default upstream settings
|
| |
+ (on other distro or as an manylinux wheel) cannot be found by Python
|
| |
+ on RHEL/Fedora because it has a different suffix.
|
| |
+ This patch adds the original names to importlib so Python is able
|
| |
+ to import extensions with an original architecture name in its
|
| |
+ file name.
|
| |
+
|
| |
+ WARNING: This patch has no effect on Python built with bootstrap
|
| |
+ enabled because Python/importlib_external.h is not regenerated
|
| |
+ and therefore Python during bootstrap contains importlib from
|
| |
+ upstream without this feature. It's possible to include
|
| |
+ Python/importlib_external.h to this patch but it'd make rebasing
|
| |
+ a nightmare because it's basically a binary file.
|
| |
+ ---
|
| |
+ Lib/importlib/_bootstrap_external.py | 31 ++++++++++++++++++++++++++--
|
| |
+ 1 file changed, 29 insertions(+), 2 deletions(-)
|
| |
+
|
| |
+ diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
|
| |
+ index 25a3f8c0e0..db4bb4d02d 100644
|
| |
+ --- a/Lib/importlib/_bootstrap_external.py
|
| |
+ +++ b/Lib/importlib/_bootstrap_external.py
|
| |
+ @@ -1566,7 +1566,7 @@ def _get_supported_file_loaders():
|
| |
+
|
| |
+ Each item is a tuple (loader, suffixes).
|
| |
+ """
|
| |
+ - extensions = ExtensionFileLoader, _imp.extension_suffixes()
|
| |
+ + extensions = ExtensionFileLoader, _alternative_architectures(_imp.extension_suffixes())
|
| |
+ source = SourceFileLoader, SOURCE_SUFFIXES
|
| |
+ bytecode = SourcelessFileLoader, BYTECODE_SUFFIXES
|
| |
+ return [extensions, source, bytecode]
|
| |
+ @@ -1622,7 +1622,7 @@ def _setup(_bootstrap_module):
|
| |
+
|
| |
+ # Constants
|
| |
+ setattr(self_module, '_relax_case', _make_relax_case())
|
| |
+ - EXTENSION_SUFFIXES.extend(_imp.extension_suffixes())
|
| |
+ + EXTENSION_SUFFIXES.extend(_alternative_architectures(_imp.extension_suffixes()))
|
| |
+ if builtin_os == 'nt':
|
| |
+ SOURCE_SUFFIXES.append('.pyw')
|
| |
+ if '_d.pyd' in EXTENSION_SUFFIXES:
|
| |
+ @@ -1635,3 +1635,30 @@ def _install(_bootstrap_module):
|
| |
+ supported_loaders = _get_supported_file_loaders()
|
| |
+ sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders)])
|
| |
+ sys.meta_path.append(PathFinder)
|
| |
+ +
|
| |
+ +
|
| |
+ +_ARCH_MAP = {
|
| |
+ + "-arm-linux-gnueabi.": "-arm-linux-gnueabihf.",
|
| |
+ + "-armeb-linux-gnueabi.": "-armeb-linux-gnueabihf.",
|
| |
+ + "-mips64-linux-gnu.": "-mips64-linux-gnuabi64.",
|
| |
+ + "-mips64el-linux-gnu.": "-mips64el-linux-gnuabi64.",
|
| |
+ + "-ppc-linux-gnu.": "-powerpc-linux-gnu.",
|
| |
+ + "-ppc-linux-gnuspe.": "-powerpc-linux-gnuspe.",
|
| |
+ + "-ppc64-linux-gnu.": "-powerpc64-linux-gnu.",
|
| |
+ + "-ppc64le-linux-gnu.": "-powerpc64le-linux-gnu.",
|
| |
+ +}
|
| |
+ +
|
| |
+ +
|
| |
+ +def _alternative_architectures(suffixes):
|
| |
+ + """Add a suffix with an alternative architecture name
|
| |
+ + to the list of suffixes so an extension built with
|
| |
+ + the default (upstream) setting is loadable with our Pythons
|
| |
+ + """
|
| |
+ +
|
| |
+ + for suffix in suffixes:
|
| |
+ + for original, alternative in _ARCH_MAP.items():
|
| |
+ + if original in suffix:
|
| |
+ + suffixes.append(suffix.replace(original, alternative))
|
| |
+ + return suffixes
|
| |
+ +
|
| |
+ + return suffixes
|
| |
Backport from Python 3.9 in rawhide. The comment in the spec/patch explains everything.