diff --git a/macros.python b/macros.python index 15abf48..4fdab09 100644 --- a/macros.python +++ b/macros.python @@ -77,7 +77,7 @@ --Obsoleting the previous default python package (if it doesn't have isa) if (string.sub(package, "-1") ~= ")") then print("\\nObsoletes: python-") - print(string.sub(package,10,string.len(package))) + print(string.sub(package,11,string.len(package))) print(" < " .. vr) end elseif (string.starts(package, "python")) then diff --git a/macros.python-srpm b/macros.python-srpm index b3a1247..ed41df4 100644 --- a/macros.python-srpm +++ b/macros.python-srpm @@ -25,10 +25,31 @@ end\ } -# This specifies what packages are equal to the python3-... packages, in python_provide macro -# E.g. in Fedora 32, python38-foo will provide python3-foo and vice versa +# There are multiple Python 3 versions packaged, but only one can be the "main" version +# That means that it owns the "python3" namespace: +# - python3 package name +# - /usr/bin/python3 command +# - python3-foo packages are meant for this version +# Other versions of Python 3 always contain the version in the namespace: +# - python3.XX package name +# - /usr/bin/python3.XX command +# - python3.XX-foo packages (if allowed) +# +# Python spec files use the version defined here to determine defaults for the +# %%py_provides and %%python_provide macros, as well as for the "pythonname" generator that +# provides python3-foo for python3.XX-foo and vice versa for the default "main" version. +# E.g. in Fedora 32, python3.8-foo will provide python3-foo, +# python3-foo will provide python3.8-foo. +# +# There are two macros: +# +# This always contains the major.minor version (with dots), default for %%python3_version. %__default_python3_version 3.8 -%__default_python3_pkgversion %(echo %__default_python3_version | sed 's/\\.//') +# +# The pkgname version that determines the alternative provide name (e.g. python3.8-foo), +# set to the same as above, but historically hasn't included the dot. +# This is left intentionally a separate macro, in case the naming convention ever changes. +%__default_python3_pkgversion %__default_python3_version # python3_pkgversion specifies the version of Python 3 in the distro. It can be # a specific version (e.g. 34 in Fedora EPEL7) diff --git a/python-rpm-macros.spec b/python-rpm-macros.spec index bc687a7..f10aafb 100644 --- a/python-rpm-macros.spec +++ b/python-rpm-macros.spec @@ -1,6 +1,6 @@ Name: python-rpm-macros Version: 3.8 -Release: 6%{?dist} +Release: 7%{?dist} Summary: The common Python RPM macros # macros and lua: MIT, compileall2.py: PSFv2 @@ -107,6 +107,9 @@ install -m 644 compileall2.py %{buildroot}%{_rpmconfigdir}/redhat/ %changelog +* Thu May 07 2020 Miro Hrončok - 3.8-7 +- Change %%__default_python3_pkgversion from 38 to 3.8 + * Tue May 05 2020 Miro Hrončok - 3.8-6 - Require recent enough SRPM macros from RPM macros, to prevent missing Lua files diff --git a/tests/test_evals.py b/tests/test_evals.py index e1d91e7..055426b 100644 --- a/tests/test_evals.py +++ b/tests/test_evals.py @@ -1,7 +1,7 @@ import subprocess import sys -XY = f'{sys.version_info[0]}{sys.version_info[1]}' +X_Y = f'{sys.version_info[0]}.{sys.version_info[1]}' def rpm_eval(expression, **kwargs): @@ -23,7 +23,7 @@ def test_python_provide_python3(): lines = rpm_eval('%python_provide python3-foo', version='6', release='1.fc66') assert 'Obsoletes: python-foo < 6-1.fc66' in lines assert 'Provides: python-foo = 6-1.fc66' in lines - assert f'Provides: python{XY}-foo = 6-1.fc66' in lines + assert f'Provides: python{X_Y}-foo = 6-1.fc66' in lines assert len(lines) == 3 @@ -31,12 +31,12 @@ def test_python_provide_python3_epoched(): lines = rpm_eval('%python_provide python3-foo', epoch='1', version='6', release='1.fc66') assert 'Obsoletes: python-foo < 1:6-1.fc66' in lines assert 'Provides: python-foo = 1:6-1.fc66' in lines - assert f'Provides: python{XY}-foo = 1:6-1.fc66' in lines + assert f'Provides: python{X_Y}-foo = 1:6-1.fc66' in lines assert len(lines) == 3 def test_python_provide_python3X(): - lines = rpm_eval(f'%python_provide python{XY}-foo', version='6', release='1.fc66') + lines = rpm_eval(f'%python_provide python{X_Y}-foo', version='6', release='1.fc66') assert 'Obsoletes: python-foo < 6-1.fc66' in lines assert 'Provides: python-foo = 6-1.fc66' in lines assert 'Provides: python3-foo = 6-1.fc66' in lines @@ -44,7 +44,7 @@ def test_python_provide_python3X(): def test_python_provide_python3X_epoched(): - lines = rpm_eval(f'%python_provide python{XY}-foo', epoch='1', version='6', release='1.fc66') + lines = rpm_eval(f'%python_provide python{X_Y}-foo', epoch='1', version='6', release='1.fc66') assert 'Obsoletes: python-foo < 1:6-1.fc66' in lines assert 'Provides: python-foo = 1:6-1.fc66' in lines assert 'Provides: python3-foo = 1:6-1.fc66' in lines @@ -56,7 +56,7 @@ def test_python_provide_doubleuse(): version='6', release='1.fc66') assert 'Obsoletes: python-foo < 6-1.fc66' in lines assert 'Provides: python-foo = 6-1.fc66' in lines - assert f'Provides: python{XY}-foo = 6-1.fc66' in lines + assert f'Provides: python{X_Y}-foo = 6-1.fc66' in lines assert len(lines) == 6 assert len(set(lines)) == 3 @@ -77,7 +77,7 @@ def test_py_provides_python3(): lines = rpm_eval('%py_provides python3-foo', version='6', release='1.fc66') assert 'Provides: python3-foo = 6-1.fc66' in lines assert 'Provides: python-foo = 6-1.fc66' in lines - assert f'Provides: python{XY}-foo = 6-1.fc66' in lines + assert f'Provides: python{X_Y}-foo = 6-1.fc66' in lines assert len(lines) == 3 @@ -85,21 +85,21 @@ def test_py_provides_python3_epoched(): lines = rpm_eval('%py_provides python3-foo', epoch='1', version='6', release='1.fc66') assert 'Provides: python3-foo = 1:6-1.fc66' in lines assert 'Provides: python-foo = 1:6-1.fc66' in lines - assert f'Provides: python{XY}-foo = 1:6-1.fc66' in lines + assert f'Provides: python{X_Y}-foo = 1:6-1.fc66' in lines assert len(lines) == 3 def test_py_provides_python3X(): - lines = rpm_eval(f'%py_provides python{XY}-foo', version='6', release='1.fc66') - assert f'Provides: python{XY}-foo = 6-1.fc66' in lines + lines = rpm_eval(f'%py_provides python{X_Y}-foo', version='6', release='1.fc66') + assert f'Provides: python{X_Y}-foo = 6-1.fc66' in lines assert 'Provides: python-foo = 6-1.fc66' in lines assert 'Provides: python3-foo = 6-1.fc66' in lines assert len(lines) == 3 def test_py_provides_python3X_epoched(): - lines = rpm_eval(f'%py_provides python{XY}-foo', epoch='1', version='6', release='1.fc66') - assert f'Provides: python{XY}-foo = 1:6-1.fc66' in lines + lines = rpm_eval(f'%py_provides python{X_Y}-foo', epoch='1', version='6', release='1.fc66') + assert f'Provides: python{X_Y}-foo = 1:6-1.fc66' in lines assert 'Provides: python-foo = 1:6-1.fc66' in lines assert 'Provides: python3-foo = 1:6-1.fc66' in lines assert len(lines) == 3 @@ -110,7 +110,7 @@ def test_py_provides_doubleuse(): version='6', release='1.fc66') assert 'Provides: python3-foo = 6-1.fc66' in lines assert 'Provides: python-foo = 6-1.fc66' in lines - assert f'Provides: python{XY}-foo = 6-1.fc66' in lines + assert f'Provides: python{X_Y}-foo = 6-1.fc66' in lines assert len(lines) == 6 assert len(set(lines)) == 3 @@ -120,5 +120,5 @@ def test_py_provides_with_evr(): version='6', release='1.fc66') assert 'Provides: python3-foo = 123' in lines assert 'Provides: python-foo = 123' in lines - assert f'Provides: python{XY}-foo = 123' in lines + assert f'Provides: python{X_Y}-foo = 123' in lines assert len(lines) == 3