Use upstream architecture names on Fedora 34+

https://fedoraproject.org/wiki/Changes/Python_Upstream_Architecture_Names

 - repalce patch 274 witch a sed call
 - update patch 353 to work both ways
 - add a new bcond to control the behavior: legacy_archnames
This commit is contained in:
Miro Hrončok 2020-09-25 15:03:23 +02:00
parent 3dbe18122c
commit 62490dd1cc
3 changed files with 81 additions and 115 deletions

View File

@ -1,83 +0,0 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pviktori@redhat.com>
Date: Mon, 28 Aug 2017 17:16:46 +0200
Subject: [PATCH] 00274: Upstream uses Debian-style architecture naming, change
to match Fedora
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: Petr Viktorin <pviktori@redhat.com>
Co-authored-by: Miro Hrončok <miro@hroncok.cz>
Co-authored-by: Tomas Orsava <torsava@redhat.com>
---
config.sub | 2 +-
configure.ac | 16 ++++++++--------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/config.sub b/config.sub
index ba37cf99e2..52a9ec6662 100755
--- a/config.sub
+++ b/config.sub
@@ -1042,7 +1042,7 @@ case $basic_machine in
;;
ppc64) basic_machine=powerpc64-unknown
;;
- ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
;;
ppc64le | powerpc64little)
basic_machine=powerpc64le-unknown
diff --git a/configure.ac b/configure.ac
index d60f05251a..6a95964657 100644
--- a/configure.ac
+++ b/configure.ac
@@ -759,9 +759,9 @@ cat >> conftest.c <<EOF
alpha-linux-gnu
# elif defined(__ARM_EABI__) && defined(__ARM_PCS_VFP)
# if defined(__ARMEL__)
- arm-linux-gnueabihf
+ arm-linux-gnueabi
# else
- armeb-linux-gnueabihf
+ armeb-linux-gnueabi
# endif
# elif defined(__ARM_EABI__) && !defined(__ARM_PCS_VFP)
# if defined(__ARMEL__)
@@ -801,7 +801,7 @@ cat >> conftest.c <<EOF
# elif _MIPS_SIM == _ABIN32
mips64el-linux-gnuabin32
# elif _MIPS_SIM == _ABI64
- mips64el-linux-gnuabi64
+ mips64el-linux-gnu
# else
# error unknown platform triplet
# endif
@@ -811,22 +811,22 @@ cat >> conftest.c <<EOF
# elif _MIPS_SIM == _ABIN32
mips64-linux-gnuabin32
# elif _MIPS_SIM == _ABI64
- mips64-linux-gnuabi64
+ mips64-linux-gnu
# else
# error unknown platform triplet
# endif
# elif defined(__or1k__)
or1k-linux-gnu
# elif defined(__powerpc__) && defined(__SPE__)
- powerpc-linux-gnuspe
+ ppc-linux-gnuspe
# elif defined(__powerpc64__)
# if defined(__LITTLE_ENDIAN__)
- powerpc64le-linux-gnu
+ ppc64le-linux-gnu
# else
- powerpc64-linux-gnu
+ ppc64-linux-gnu
# endif
# elif defined(__powerpc__)
- powerpc-linux-gnu
+ ppc-linux-gnu
# elif defined(__s390x__)
s390x-linux-gnu
# elif defined(__s390__)

View File

@ -4,15 +4,19 @@ Date: Tue, 4 Aug 2020 12:04:03 +0200
Subject: [PATCH] 00353: Original names for architectures with different names Subject: [PATCH] 00353: Original names for architectures with different names
downstream downstream
Pythons in RHEL/Fedora use different names for some architectures 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). than upstream and other distros (for example ppc64 vs. powerpc64).
See patch 274. This was patched in patch 274, now it is sedded if %with legacy_archnames.
That means that an extension built with the default upstream settings
(on other distro or as an manylinux wheel) cannot be found by Python That meant that an extension built with the default upstream settings
on RHEL/Fedora because it has a different suffix. (on other distro or as an manylinux wheel) could not been found by Python
This patch adds the original names to importlib so Python is able on RHEL/Fedora because it had a different suffix.
to import extensions with an original architecture name in its This patch adds the legacy names to importlib so Python is able
to import extensions with a legacy architecture name in its
file name. 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 WARNING: This patch has no effect on Python built with bootstrap
enabled because Python/importlib_external.h is not regenerated enabled because Python/importlib_external.h is not regenerated
@ -21,11 +25,11 @@ upstream without this feature. It's possible to include
Python/importlib_external.h to this patch but it'd make rebasing Python/importlib_external.h to this patch but it'd make rebasing
a nightmare because it's basically a binary file. a nightmare because it's basically a binary file.
--- ---
Lib/importlib/_bootstrap_external.py | 31 ++++++++++++++++++++++++++-- Lib/importlib/_bootstrap_external.py | 40 ++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-) 1 file changed, 38 insertions(+), 2 deletions(-)
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
index 25a3f8c0e0..db4bb4d02d 100644 index 25a3f8c0e0..a2edbebc88 100644
--- a/Lib/importlib/_bootstrap_external.py --- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py
@@ -1566,7 +1566,7 @@ def _get_supported_file_loaders(): @@ -1566,7 +1566,7 @@ def _get_supported_file_loaders():
@ -46,7 +50,7 @@ index 25a3f8c0e0..db4bb4d02d 100644
if builtin_os == 'nt': if builtin_os == 'nt':
SOURCE_SUFFIXES.append('.pyw') SOURCE_SUFFIXES.append('.pyw')
if '_d.pyd' in EXTENSION_SUFFIXES: if '_d.pyd' in EXTENSION_SUFFIXES:
@@ -1635,3 +1635,30 @@ def _install(_bootstrap_module): @@ -1635,3 +1635,39 @@ def _install(_bootstrap_module):
supported_loaders = _get_supported_file_loaders() supported_loaders = _get_supported_file_loaders()
sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders)]) sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders)])
sys.meta_path.append(PathFinder) sys.meta_path.append(PathFinder)
@ -61,6 +65,15 @@ index 25a3f8c0e0..db4bb4d02d 100644
+ "-ppc-linux-gnuspe.": "-powerpc-linux-gnuspe.", + "-ppc-linux-gnuspe.": "-powerpc-linux-gnuspe.",
+ "-ppc64-linux-gnu.": "-powerpc64-linux-gnu.", + "-ppc64-linux-gnu.": "-powerpc64-linux-gnu.",
+ "-ppc64le-linux-gnu.": "-powerpc64le-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.",
+} +}
+ +
+ +

View File

@ -17,7 +17,7 @@ URL: https://www.python.org/
%global prerel rc2 %global prerel rc2
%global upstream_version %{general_version}%{?prerel} %global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}} Version: %{general_version}%{?prerel:~%{prerel}}
Release: 1%{?dist} Release: 2%{?dist}
License: Python License: Python
@ -99,6 +99,19 @@ License: Python
%bcond_with valgrind %bcond_with valgrind
%endif %endif
# https://fedoraproject.org/wiki/Changes/Python_Upstream_Architecture_Names
# For a very long time we have converted "upstream architecture names" to "Fedora names".
# This made sense at the time, see https://github.com/pypa/manylinux/issues/687#issuecomment-666362947
# However, with manylinux wheels popularity growth, this is now a problem.
# Wheels built on a Linux that doesn't do this were not compatible with ours and vice versa.
# We now have a compatibility layer to workaround a problem,
# but we also no longer use the legacy arch names in Fedora 34+.
# This bcond controls the behavior. The defaults should be good for anybody.
%if 0%{?fedora} >= 34 || 0%{?rhel} >= 9
%bcond_with legacy_archnames
%else
%bcond_without legacy_archnames
%endif
# ===================== # =====================
# General global macros # General global macros
@ -122,8 +135,21 @@ License: Python
%global LDVERSION_optimized %{pybasever}%{ABIFLAGS_optimized} %global LDVERSION_optimized %{pybasever}%{ABIFLAGS_optimized}
%global LDVERSION_debug %{pybasever}%{ABIFLAGS_debug} %global LDVERSION_debug %{pybasever}%{ABIFLAGS_debug}
%global SOABI_optimized cpython-%{pyshortver}%{ABIFLAGS_optimized}-%{_arch}-linux%{_gnu} # When we use the upstream arch triplets, we convert them from the legacy ones
%global SOABI_debug cpython-%{pyshortver}%{ABIFLAGS_debug}-%{_arch}-linux%{_gnu} # This is reversed in prep when %%with legacy_archnames, so we keep both macros
%global platform_triplet_legacy %{_arch}-linux%{_gnu}
%global platform_triplet_upstream %{expand:%(echo %{platform_triplet_legacy} | sed -E \\
-e 's/^arm(eb)?-linux-gnueabi$/arm\\1-linux-gnueabihf/' \\
-e 's/^mips64(el)?-linux-gnu$/mips64\\1-linux-gnuabi64/' \\
-e 's/^ppc(64)?(le)?-linux-gnu$/powerpc\\1\\2-linux-gnu/')}
%if %{with legacy_archnames}
%global platform_triplet %{platform_triplet_legacy}
%else
%global platform_triplet %{platform_triplet_upstream}
%endif
%global SOABI_optimized cpython-%{pyshortver}%{ABIFLAGS_optimized}-%{platform_triplet}
%global SOABI_debug cpython-%{pyshortver}%{ABIFLAGS_debug}-%{platform_triplet}
# All bytecode files are in a __pycache__ subdirectory, with a name # All bytecode files are in a __pycache__ subdirectory, with a name
# reflecting the version of the bytecode. # reflecting the version of the bytecode.
@ -287,10 +313,6 @@ Patch189: 00189-use-rpm-wheels.patch
# Downstream only: Awaiting resources to work on upstream PEP # Downstream only: Awaiting resources to work on upstream PEP
Patch251: 00251-change-user-install-location.patch Patch251: 00251-change-user-install-location.patch
# 00274 # 1e9258f6e8f70e86d5130113d3eed22993cf3da9
# Upstream uses Debian-style architecture naming, change to match Fedora
Patch274: 00274-fix-arch-names.patch
# 00328 # 367fdcb5a075f083aea83ac174999272a8faf75c # 00328 # 367fdcb5a075f083aea83ac174999272a8faf75c
# Restore pyc to TIMESTAMP invalidation mode as default in rpmbuild # Restore pyc to TIMESTAMP invalidation mode as default in rpmbuild
# #
@ -305,18 +327,22 @@ Patch274: 00274-fix-arch-names.patch
# Ideally, we should talk to upstream and explain why we don't want this # Ideally, we should talk to upstream and explain why we don't want this
Patch328: 00328-pyc-timestamp-invalidation-mode.patch Patch328: 00328-pyc-timestamp-invalidation-mode.patch
# 00353 # f3c11e227c715450b3c1e945a5004e84cce41a58 # 00353 # ab4cc97b643cfe99f567e3a03e5617b507183771
# Original names for architectures with different names downstream # Original names for architectures with different names downstream
# #
# Pythons in RHEL/Fedora use different names for some architectures # 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). # than upstream and other distros (for example ppc64 vs. powerpc64).
# See patch 274. # This was patched in patch 274, now it is sedded if %%with legacy_archnames.
# That means that an extension built with the default upstream settings #
# (on other distro or as an manylinux wheel) cannot be found by Python # That meant that an extension built with the default upstream settings
# on RHEL/Fedora because it has a different suffix. # (on other distro or as an manylinux wheel) could not been found by Python
# This patch adds the original names to importlib so Python is able # on RHEL/Fedora because it had a different suffix.
# to import extensions with an original architecture name in its # This patch adds the legacy names to importlib so Python is able
# to import extensions with a legacy architecture name in its
# file name. # 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 # WARNING: This patch has no effect on Python built with bootstrap
# enabled because Python/importlib_external.h is not regenerated # enabled because Python/importlib_external.h is not regenerated
@ -324,7 +350,7 @@ Patch328: 00328-pyc-timestamp-invalidation-mode.patch
# upstream without this feature. It's possible to include # upstream without this feature. It's possible to include
# Python/importlib_external.h to this patch but it'd make rebasing # Python/importlib_external.h to this patch but it'd make rebasing
# a nightmare because it's basically a binary file. # a nightmare because it's basically a binary file.
Patch353: 00353-Original-names-for-architectures-with-different-name.patch Patch353: 00353-architecture-names-upstream-downstream.patch
# (New patches go here ^^^) # (New patches go here ^^^)
# #
@ -683,6 +709,12 @@ rm -r Modules/expat
# (This is after patching, so that we can use patches directly from upstream) # (This is after patching, so that we can use patches directly from upstream)
rm configure pyconfig.h.in rm configure pyconfig.h.in
# When we use the legacy arch names, we need to change them in configure.ac
%if %{with legacy_archnames}
sed -i configure.ac \
-e 's/\b%{platform_triplet_upstream}\b/%{platform_triplet_legacy}/'
%endif
# ====================================================== # ======================================================
# Configuring and building the code: # Configuring and building the code:
@ -1381,8 +1413,8 @@ CheckPython optimized
# "Makefile" and the config-32/64.h file are needed by # "Makefile" and the config-32/64.h file are needed by
# distutils/sysconfig.py:_init_posix(), so we include them in the core # distutils/sysconfig.py:_init_posix(), so we include them in the core
# package, along with their parent directories (bug 531901): # package, along with their parent directories (bug 531901):
%dir %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/ %dir %{pylibdir}/config-%{LDVERSION_optimized}-%{platform_triplet}/
%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile %{pylibdir}/config-%{LDVERSION_optimized}-%{platform_triplet}/Makefile
%dir %{_includedir}/python%{LDVERSION_optimized}/ %dir %{_includedir}/python%{LDVERSION_optimized}/
%{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h} %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
@ -1400,9 +1432,9 @@ CheckPython optimized
%{_bindir}/2to3 %{_bindir}/2to3
%endif %endif
%{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/* %{pylibdir}/config-%{LDVERSION_optimized}-%{platform_triplet}/*
%if %{without flatpackage} %if %{without flatpackage}
%exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{_arch}-linux%{_gnu}/Makefile %exclude %{pylibdir}/config-%{LDVERSION_optimized}-%{platform_triplet}/Makefile
%exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h} %exclude %{_includedir}/python%{LDVERSION_optimized}/%{_pyconfig_h}
%endif %endif
%{_includedir}/python%{LDVERSION_optimized}/*.h %{_includedir}/python%{LDVERSION_optimized}/*.h
@ -1593,7 +1625,7 @@ CheckPython optimized
%{_libdir}/%{py_INSTSONAME_debug} %{_libdir}/%{py_INSTSONAME_debug}
# Analog of the -devel subpackage's files: # Analog of the -devel subpackage's files:
%{pylibdir}/config-%{LDVERSION_debug}-%{_arch}-linux%{_gnu} %{pylibdir}/config-%{LDVERSION_debug}-%{platform_triplet}
%{_includedir}/python%{LDVERSION_debug} %{_includedir}/python%{LDVERSION_debug}
%{_bindir}/python%{LDVERSION_debug}-config %{_bindir}/python%{LDVERSION_debug}-config
%{_bindir}/python%{LDVERSION_debug}-*-config %{_bindir}/python%{LDVERSION_debug}-*-config
@ -1640,6 +1672,10 @@ CheckPython optimized
# ====================================================== # ======================================================
%changelog %changelog
* Fri Sep 25 2020 Miro Hrončok <mhroncok@redhat.com> - 3.9.0~rc2-2
- Use upstream architecture names on Fedora 34+
- https://fedoraproject.org/wiki/Changes/Python_Upstream_Architecture_Names
* Thu Sep 17 2020 Miro Hrončok <mhroncok@redhat.com> - 3.9.0~rc2-1 * Thu Sep 17 2020 Miro Hrončok <mhroncok@redhat.com> - 3.9.0~rc2-1
- Update to 3.9.0rc2 - Update to 3.9.0rc2