You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
4.1 KiB
97 lines
4.1 KiB
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 |
|
MIME-Version: 1.0 |
|
Content-Type: text/plain; charset=UTF-8 |
|
Content-Transfer-Encoding: 8bit |
|
|
|
https://fedoraproject.org/wiki/Changes/Python_Upstream_Architecture_Names |
|
|
|
Pythons in RHEL/Fedora used different names for some architectures |
|
than upstream and other distros (for example ppc64 vs. powerpc64). |
|
This was patched in patch 274, now it is sedded if %with legacy_archnames. |
|
|
|
That meant that an extension built with the default upstream settings |
|
(on other distro or as an manylinux wheel) could not been found by Python |
|
on RHEL/Fedora because it had a different suffix. |
|
This patch adds the legacy names to importlib so Python is able |
|
to import extensions with a legacy architecture name in its |
|
file name. |
|
It work both ways, so it support both %with and %without legacy_archnames. |
|
|
|
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. |
|
|
|
Co-authored-by: Miro Hrončok <miro@hroncok.cz> |
|
--- |
|
Lib/importlib/_bootstrap_external.py | 40 ++++++++++++++++++++++++++-- |
|
1 file changed, 38 insertions(+), 2 deletions(-) |
|
|
|
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py |
|
index a00f35cdce..0087a3b4de 100644 |
|
--- a/Lib/importlib/_bootstrap_external.py |
|
+++ b/Lib/importlib/_bootstrap_external.py |
|
@@ -1629,7 +1629,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] |
|
@@ -1693,7 +1693,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: |
|
@@ -1706,3 +1706,39 @@ 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.", |
|
+ # The above, but the other way around: |
|
+ "-arm-linux-gnueabihf.": "-arm-linux-gnueabi.", |
|
+ "-armeb-linux-gnueabihf.": "-armeb-linux-gnueabi.", |
|
+ "-mips64-linux-gnuabi64.": "-mips64-linux-gnu.", |
|
+ "-mips64el-linux-gnuabi64.": "-mips64el-linux-gnu.", |
|
+ "-powerpc-linux-gnu.": "-ppc-linux-gnu.", |
|
+ "-powerpc-linux-gnuspe.": "-ppc-linux-gnuspe.", |
|
+ "-powerpc64-linux-gnu.": "-ppc64-linux-gnu.", |
|
+ "-powerpc64le-linux-gnu.": "-ppc64le-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
|
|
|