From bbfe4930d9af5bf55847c51be645779bbb9c92a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Thu, 5 Mar 2020 23:40:17 +0100 Subject: [PATCH] Automatically call %python_provide This allows us to drop the %python_provide macro from most spec files, except where we want to use it for virtual provides or empty packages. --- python-rpm-generators.spec | 9 ++++-- pythonname.attr | 20 ++++++++++++ tests/pythonname.sh | 28 +++++++++++++++++ tests/pythonname.spec | 62 ++++++++++++++++++++++++++++++++++++++ tests/tests.yml | 3 ++ 5 files changed, 120 insertions(+), 2 deletions(-) create mode 100644 pythonname.attr create mode 100755 tests/pythonname.sh create mode 100644 tests/pythonname.spec diff --git a/python-rpm-generators.spec b/python-rpm-generators.spec index 3553018..292a014 100644 --- a/python-rpm-generators.spec +++ b/python-rpm-generators.spec @@ -10,7 +10,8 @@ Url: https://src.fedoraproject.org/python-rpm-generators Source0: https://raw.githubusercontent.com/rpm-software-management/rpm/102eab50b3d0d6546dfe082eac0ade21e6b3dbf1/COPYING Source1: python.attr Source2: pythondist.attr -Source3: pythondistdeps.py +Source3: pythonname.attr +Source4: pythondistdeps.py BuildArch: noarch @@ -22,6 +23,8 @@ Summary: %{summary} Requires: python3-setuptools # We have parametric macro generators, we need RPM 4.16 (4.15.90+ is 4.16 alpha) Requires: rpm > 4.15.90-0 +# We use %%python_provide +Requires: python-rpm-macros %description -n python3-rpm-generators %{summary}. @@ -31,19 +34,21 @@ Requires: rpm > 4.15.90-0 cp -a %{sources} . %install -install -Dpm0644 -t %{buildroot}%{_fileattrsdir} python.attr pythondist.attr +install -Dpm0644 -t %{buildroot}%{_fileattrsdir} *.attr install -Dpm0755 -t %{buildroot}%{_rpmconfigdir} pythondistdeps.py %files -n python3-rpm-generators %license COPYING %{_fileattrsdir}/python.attr %{_fileattrsdir}/pythondist.attr +%{_fileattrsdir}/pythonname.attr %{_rpmconfigdir}/pythondistdeps.py %changelog * Wed Apr 01 2020 Miro HronĨok - 11-1 - Rewrite python(abi) generators to Lua to make them faster - RPM 4.16+ is needed +- Automatically call %%python_provide * Thu Jan 30 2020 Fedora Release Engineering - 10-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild diff --git a/pythonname.attr b/pythonname.attr new file mode 100644 index 0000000..b086549 --- /dev/null +++ b/pythonname.attr @@ -0,0 +1,20 @@ +%__pythonname_provides() %{lua: + -- this macro is called for each file in a package, the path being in %1 + -- but we don't need to know the path, so we would get for each file: Macro %1 defined but not used within scope + -- in here, we expand %name conditionally on %1 to suppress the warning + local name = rpm.expand('%{?1:%{name}}') + -- a structure that knows what names were already processed, so we can end early + if __pythonname_beenthere == nil then + __pythonname_beenthere = {} + end + -- we save ourselves a trip to %python_provide if we have already been there + if __pythonname_beenthere[name] == nil then + local python_provide = rpm.expand('%{?python_provide:%python_provide %{name}}') + for provides in python_provide:gmatch('Provides:[ \\t]+([^\\n]+)') do + print(provides .. " ") + end + __pythonname_beenthere[name] = true + end +} + +%__pythonname_path ^/ diff --git a/tests/pythonname.sh b/tests/pythonname.sh new file mode 100755 index 0000000..272016e --- /dev/null +++ b/tests/pythonname.sh @@ -0,0 +1,28 @@ +#!/usr/bin/bash -eux +rpmbuild -ba pythonname.spec + +XY=$(rpm --eval '%python3_version_nodots') +RPMDIR=$(rpm --eval '%_topdir')/RPMS/noarch + +echo "Provides for python${XY}-foo" +rpm -qp --provides ${RPMDIR}/python${XY}-foo-0-0.noarch.rpm +rpm -qp --provides ${RPMDIR}/python${XY}-foo-0-0.noarch.rpm | grep -q '^python-foo = 0-0$' +rpm -qp --provides ${RPMDIR}/python${XY}-foo-0-0.noarch.rpm | grep -q '^python3-foo = 0-0$' + +echo "Provides for python3-foo" +rpm -qp --provides ${RPMDIR}/python3-foo-0-0.noarch.rpm +rpm -qp --provides ${RPMDIR}/python3-foo-0-0.noarch.rpm | grep -q '^python-foo = 0-0$' +rpm -qp --provides ${RPMDIR}/python3-foo-0-0.noarch.rpm | grep -q '^python'${XY}'-foo = 0-0$' + +echo "Provides for python2-foo" +rpm -qp --provides ${RPMDIR}/python2-foo-0-0.noarch.rpm +rpm -qp --provides ${RPMDIR}/python2-foo-0-0.noarch.rpm | grep -vq '^python-foo = 0-0$' + +echo "Provides for python-foo" +rpm -qp --provides ${RPMDIR}/python-foo-0-0.noarch.rpm +rpm -qp --provides ${RPMDIR}/python-foo-0-0.noarch.rpm | grep -vq '^python2-foo = 0-0$' + +echo "Provides for python35-foo" +rpm -qp --provides ${RPMDIR}/python35-foo-0-0.noarch.rpm +rpm -qp --provides ${RPMDIR}/python35-foo-0-0.noarch.rpm | grep -vq '^python-foo = 0-0$' +rpm -qp --provides ${RPMDIR}/python35-foo-0-0.noarch.rpm | grep -vq '^python3-foo = 0-0$' diff --git a/tests/pythonname.spec b/tests/pythonname.spec new file mode 100644 index 0000000..b4a3f6d --- /dev/null +++ b/tests/pythonname.spec @@ -0,0 +1,62 @@ +Name: pythonname +Version: 0 +Release: 0 +Summary: ... +License: MIT +BuildArch: noarch + +%description +... + +%install +touch %{buildroot}/something +touch %{buildroot}/something_else +touch %{buildroot}/something_completely_different + + +%package -n python-foo +Summary: ... +%description -n python-foo +... +%files -n python-foo +/* + + +%package -n python2-foo +Summary: ... +%description -n python2-foo +... +%files -n python2-foo +/* + + +%package -n python3-foo +Summary: ... +%description -n python3-foo +... +%files -n python3-foo +/* + + +%package -n python%{python3_version_nodots}-foo +Summary: ... +%description -n python%{python3_version_nodots}-foo +... +%files -n python%{python3_version_nodots}-foo +/* + + +%package -n python35-foo +Summary: ... +%description -n python35-foo +... +%files -n python35-foo +/* + + +%package -n ruby-foo +Summary: ... +%description -n ruby-foo +... +%files -n ruby-foo +/* diff --git a/tests/tests.yml b/tests/tests.yml index 5649fa2..cceb9b4 100644 --- a/tests/tests.yml +++ b/tests/tests.yml @@ -16,6 +16,9 @@ - pythonabi: dir: . run: ./pythonabi.sh + - pythonname: + dir: . + run: ./pythonname.sh required_packages: - rpm-build - python3-devel