On Fedora 44+, split this package into multiple subpackages

python3.9 and python3.6 are the only remaining Pythons that are "flatpackaged".

As they are likely to stay around for a while,
it makes no sense to wait this out (like we did with e.g. 3.7 and 3.8).

This (together with similar change in python3.6)
will make all the packaged Pythons packaged in the same way.

Additionally, this also enables the debug build, which was added to CI.
This commit is contained in:
Miro Hrončok 2025-10-06 23:53:41 +02:00
commit 7a81f94ccc
2 changed files with 46 additions and 12 deletions

View file

@ -5,6 +5,9 @@ provision:
hardware:
memory: '>= 3 GB'
environment:
pybasever: '3.9'
discover:
- name: tests_python
how: shell
@ -12,13 +15,16 @@ discover:
tests:
- name: smoke
path: /smoke
test: "VERSION=3.9 ./venv.sh"
test: "VERSION=${pybasever} ./venv.sh"
- name: debugsmoke
path: /smoke
test: "PYTHON=python${pybasever}d TOX=false VERSION=${pybasever} INSTALL_OR_SKIP=true ./venv.sh"
- name: selftest
path: /selftest
test: VERSION=3.9 X="-x test_wsgiref" ./parallel.sh
test: VERSION=${pybasever} X="-x test_wsgiref" ./parallel.sh
- name: marshalparser
path: /marshalparser
test: "VERSION=3.9 SAMPLE=10 ./test_marshalparser_compatibility.sh"
test: "VERSION=${pybasever} SAMPLE=10 ./test_marshalparser_compatibility.sh"
prepare:
- name: Install dependencies
@ -26,7 +32,10 @@ prepare:
package:
- gcc # for extension building in venv and selftest
- gdb # for test_gdb
- python3.9 # the test subject
- "python${pybasever}" # the test subject
- "python${pybasever}-devel" # for extension building in venv and selftest
- "python${pybasever}-tkinter" # for selftest
- "python${pybasever}-test" # for selftest
- python3-tox # for venv tests
- glibc-all-langpacks # for locale tests
- marshalparser # for testing compatibility (magic numbers) with marshalparser

View file

@ -17,7 +17,7 @@ URL: https://www.python.org/
#global prerel ...
%global upstream_version %{general_version}%{?prerel}
Version: %{general_version}%{?prerel:~%{prerel}}
Release: 1%{?dist}
Release: 2%{?dist}
License: Python
@ -40,9 +40,10 @@ License: Python
%endif
# Flat package, i.e. no separate subpackages
# Default (in Fedora): if this is a main Python, it is not a flatpackage
# Default (in Fedora >= 44): disabled
# Default (in Fedora < 44): enabled when this is not the main Python
# Not supported: Combination of flatpackage enabled and main_python enabled
%if %{with main_python}
%if %{with main_python} || 0%{?fedora} >= 44
%bcond_with flatpackage
%else
%bcond_without flatpackage
@ -467,9 +468,18 @@ Obsoletes: platform-python < %{pybasever}
Provides: python%{pyshortver} = %{version}-%{release}
Obsoletes: python%{pyshortver} < %{version}-%{release}
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: %{pkgname} < 3.9.24-2
%if %{with main_python}
# Packages with Python modules in standard locations automatically
# depend on python(abi). Provide that here.
Provides: python(abi) = %{pybasever}
%else
# We exclude the `python(abi)` Provides
%global __requires_exclude ^python\\(abi\\) = 3\\..+
%global __provides_exclude ^python\\(abi\\) = 3\\..+
%endif
Requires: %{pkgname}-libs%{?_isa} = %{version}-%{release}
@ -584,6 +594,8 @@ Conflicts: python-libs < 3
# (We explicitly conflict with python-libs and not python2-libs, so only the
# old Python 2 builds that still provided unversioned Python are handled.)
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: %{pkgname} < 3.9.24-2
%description -n %{pkgname}-libs
This package contains runtime libraries for use by Python:
@ -603,6 +615,7 @@ Requires: (python3-rpm-macros if rpm-build)
Requires: (pyproject-rpm-macros if rpm-build)
%if %{without bootstrap}
%if %{with main_python}
# This is not "API" (packages that need setuptools should still BuildRequire it)
# However some packages apparently can build both with and without setuptools
# producing egg-info as file or directory (depending on setuptools presence).
@ -611,6 +624,7 @@ Requires: (pyproject-rpm-macros if rpm-build)
# See https://bugzilla.redhat.com/show_bug.cgi?id=1623914
# See https://fedoraproject.org/wiki/Packaging:Directory_Replacement
Requires: (%{pkgname}-setuptools if rpm-build)
%endif
Requires: (python3-rpm-generators if rpm-build)
%endif
@ -630,6 +644,9 @@ Provides: platform-python-devel%{?_isa} = %{version}-%{release}
Obsoletes: platform-python-devel < %{pybasever}
%endif
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: %{pkgname} < 3.9.24-2
%description -n %{pkgname}-devel
This package contains the header files and configuration needed to compile
Python extension modules (typically written in C or C++), to embed Python
@ -654,6 +671,9 @@ Obsoletes: %{pkgname}-tools < %{version}-%{release}
# In Fedora 31, /usr/bin/idle was moved here from Python 2.
Conflicts: python-tools < 3
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: %{pkgname} < 3.9.24-2
%description -n %{pkgname}-idle
IDLE is Pythons Integrated Development and Learning Environment.
@ -675,6 +695,9 @@ Requires: %{pkgname} = %{version}-%{release}
# (We don't provide python3-turtledemo, that's not too useful when imported.)
%py_provides %{pkgname}-turtle
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: %{pkgname} < 3.9.24-2
%description -n %{pkgname}-tkinter
The Tkinter (Tk interface) library is a graphical user interface toolkit for
the Python programming language.
@ -685,6 +708,9 @@ Summary: The self-test suite for the main python3 package
Requires: %{pkgname} = %{version}-%{release}
Requires: %{pkgname}-libs%{?_isa} = %{version}-%{release}
# https://docs.fedoraproject.org/en-US/packaging-guidelines/#_one_to_many_replacement
Obsoletes: %{pkgname} < 3.9.24-2
%description -n %{pkgname}-test
The self-test suite for the Python interpreter.
@ -735,11 +761,6 @@ The debug runtime additionally supports debug builds of C-API extensions
%else # with flatpackage
# We'll not provide this, on purpose
# No package in Fedora shall ever depend on flatpackage via this
%global __requires_exclude ^python\\(abi\\) = 3\\..$
%global __provides_exclude ^python\\(abi\\) = 3\\..$
# Python interpreter packages used to be named (or provide) name pythonXY (e.g.
# python39). However, to align it with the executable names and to prepare for
# Python 3.10, they were renamed to pythonX.Y (e.g. python3.9, python3.10). We
@ -1856,6 +1877,10 @@ CheckPython optimized
# ======================================================
%changelog
* Wed Oct 15 2025 Miro Hrončok <mhroncok@redhat.com> - 3.9.24-2
- On Fedora 44+, split this package into multiple subpackages
- This mimics newer Python versions
* Fri Oct 10 2025 Karolina Surma <ksurma@redhat.com> - 3.9.24-1
- Update to Python 3.9.24