Miro Hrončok 2020-05-07 17:28:36 +02:00
parent 76aecd9ad7
commit 5f3e4d6300
4 changed files with 43 additions and 19 deletions

View File

@ -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

View File

@ -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)

View File

@ -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 <mhroncok@redhat.com> - 3.8-7
- Change %%__default_python3_pkgversion from 38 to 3.8
* Tue May 05 2020 Miro Hrončok <mhroncok@redhat.com> - 3.8-6
- Require recent enough SRPM macros from RPM macros, to prevent missing Lua files

View File

@ -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