[libvirt] [PATCH python v2 0/9] Various improvements to RPM spec

Daniel P. Berrange (9): Allow disabling of python2 RPM build Allow override of which sub-RPMs to build Add checks for min supported distros Add emacs mode marker to activate rpm-spec highlighting Adapt to rename of py2 RPMs from python- to python2- prefix Turn on python3 sub-RPMs for RHEL > 7 Require libvirt native version matching py version by default Fix filtering of RPM provides for .so files Use python*_sitearch macros instead of manually defining the dir libvirt-python.spec.in | 89 +++++++++++++++++++++++++++++++++++++++----------- setup.py | 3 +- 2 files changed, 71 insertions(+), 21 deletions(-) -- 2.14.3

With Fedora modularity, it is possible to have add-on repos for multiple versions of python3. It is thus desirable to be able to build libvirt-python in these repos, with only the python3 sub-RPMs enabled. Thus also helps if future RHEL/Fedora drop python2 entirely from their default repos. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index 4d0262d..5bbebeb 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -1,4 +1,5 @@ +%define with_python2 1 %define with_python3 0 %if 0%{?fedora} %define with_python3 1 @@ -13,9 +14,11 @@ Url: http://libvirt.org License: LGPLv2+ Group: Development/Libraries BuildRequires: libvirt-devel >= @C_VERSION@ +%if %{with_python2} BuildRequires: python-devel BuildRequires: python-nose BuildRequires: python-lxml +%endif %if %{with_python3} BuildRequires: python3-devel BuildRequires: python3-nose @@ -32,6 +35,7 @@ written in the Python programming language to use the interface supplied by the libvirt library to use the virtualization capabilities of recent versions of Linux (and other OSes). +%if %{with_python2} %package -n python2-libvirt Summary: The libvirt virtualization API python2 binding Url: http://libvirt.org @@ -46,6 +50,7 @@ The python2-libvirt package contains a module that permits applications written in the Python programming language to use the interface supplied by the libvirt library to use the virtualization capabilities of recent versions of Linux (and other OSes). +%endif %if %{with_python3} %package -n python3-libvirt @@ -73,23 +78,30 @@ of recent versions of Linux (and other OSes). find examples -type f -exec chmod 0644 \{\} \; %build +%if %{with_python2} CFLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build +%endif %if %{with_python3} CFLAGS="$RPM_OPT_FLAGS" %{__python3} setup.py build %endif %install +%if %{with_python2} %{__python} setup.py install --skip-build --root=%{buildroot} +%endif %if %{with_python3} %{__python3} setup.py install --skip-build --root=%{buildroot} %endif %check +%if %{with_python2} %{__python} setup.py test +%endif %if %{with_python3} %{__python3} setup.py test %endif +%if %{with_python2} %files -n python2-libvirt %defattr(-,root,root) %doc ChangeLog AUTHORS NEWS README COPYING COPYING.LESSER examples/ @@ -98,6 +110,7 @@ CFLAGS="$RPM_OPT_FLAGS" %{__python3} setup.py build %{_libdir}/python2*/site-packages/libvirt_lxc.py* %{_libdir}/python2*/site-packages/libvirtmod* %{_libdir}/python2*/site-packages/*egg-info +%endif %if %{with_python3} %files -n python3-libvirt -- 2.14.3

Allow using rpmbuild --define "with_python2 0" to override the default logic about which python sub-RPMs to build Reviewed-by: Pavel Hrdina <phrdina@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index 5bbebeb..1619e26 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -1,10 +1,13 @@ -%define with_python2 1 -%define with_python3 0 +%define _with_python2 1 +%define _with_python3 0 %if 0%{?fedora} -%define with_python3 1 +%define _with_python3 1 %endif +%{!?with_python2: %define with_python2 %{_with_python2}} +%{!?with_python3: %define with_python3 %{_with_python3}} + Summary: The libvirt virtualization API python2 binding Name: libvirt-python Version: @PY_VERSION@ -- 2.14.3

Be clear about which distros we aim to support with the specfile, so we know what we can cleanup in the spec later. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index 1619e26..a98b902 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -1,3 +1,14 @@ +# This spec file assumes you are building on a Fedora or RHEL version +# that's still supported by the vendor. It may work on other distros +# or versions, but no effort will be made to ensure that going forward +%define min_rhel 6 +%define min_fedora 25 + +%if (0%{?fedora} && 0%{?fedora} >= %{min_fedora}) || (0%{?rhel} && 0%{?rhel} >= %{min_rhel}) + %define supported_platform 1 +%else + %define supported_platform 0 +%endif %define _with_python2 1 %define _with_python3 0 @@ -81,6 +92,11 @@ of recent versions of Linux (and other OSes). find examples -type f -exec chmod 0644 \{\} \; %build +%if ! %{supported_platform} +echo "This RPM requires either Fedora >= %{min_fedora} or RHEL >= %{min_rhel}" +exit 1 +%endif + %if %{with_python2} CFLAGS="$RPM_OPT_FLAGS" %{__python} setup.py build %endif -- 2.14.3

Reviewed-by: Pavel Hrdina <phrdina@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index a98b902..b667ebe 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -1,3 +1,5 @@ +# -*- rpm-spec -*- + # This spec file assumes you are building on a Fedora or RHEL version # that's still supported by the vendor. It may work on other distros # or versions, but no effort will be made to ensure that going forward -- 2.14.3

Reviewed-by: Pavel Hrdina <phrdina@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index b667ebe..b13e961 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -18,6 +18,12 @@ %define _with_python3 1 %endif +# Whether py2 packages are assumed to have python2- name prefix +%define py2_versioned_deps 0 +%if 0%{?fedora} || 0%{?rhel} > 7 +%define py2_versioned_deps 1 +%endif + %{!?with_python2: %define with_python2 %{_with_python2}} %{!?with_python3: %define with_python3 %{_with_python3}} @@ -31,10 +37,16 @@ License: LGPLv2+ Group: Development/Libraries BuildRequires: libvirt-devel >= @C_VERSION@ %if %{with_python2} +%if %{py2_versioned_deps} +BuildRequires: python2-devel +BuildRequires: python2-nose +BuildRequires: python2-lxml +%else BuildRequires: python-devel BuildRequires: python-nose BuildRequires: python-lxml %endif +%endif %if %{with_python3} BuildRequires: python3-devel BuildRequires: python3-nose -- 2.14.3

It is expected that future RHEL-8 will have python3 by default, so enable that. It is unclear whether python2 will still be available, so leave that enabled for now. Reviewed-by: Pavel Hrdina <phrdina@redhat.com> Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index b13e961..48a4933 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -14,7 +14,7 @@ %define _with_python2 1 %define _with_python3 0 -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 7 %define _with_python3 1 %endif -- 2.14.3

Although we're capable of building against any libvirt >= 0.9.11, 99% of the time we want RPM builds to be done against matching libvirt version, otherwise we might silently build against an unexpected/wrong version. We don't support building against a native libvirt that's newer than the python binding, since the generator may incorrectly handle new APIs. So use == instead of >= too. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 2 +- setup.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index 48a4933..2dfc84a 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -35,7 +35,7 @@ Source0: http://libvirt.org/sources/python/%{name}-%{version}.tar.gz Url: http://libvirt.org License: LGPLv2+ Group: Development/Libraries -BuildRequires: libvirt-devel >= @C_VERSION@ +BuildRequires: libvirt-devel == %{version} %if %{with_python2} %if %{py2_versioned_deps} BuildRequires: python2-devel diff --git a/setup.py b/setup.py index 85af965..5e29c8a 100755 --- a/setup.py +++ b/setup.py @@ -175,8 +175,7 @@ class my_sdist(sdist): f2 = open('libvirt-python.spec', 'w') for line in f1: f2.write(line - .replace('@PY_VERSION@', self.distribution.get_version()) - .replace('@C_VERSION@', MIN_LIBVIRT)) + .replace('@PY_VERSION@', self.distribution.get_version())) f1.close() f2.close() -- 2.14.3

Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index 2dfc84a..f658496 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -54,7 +54,12 @@ BuildRequires: python3-lxml %endif # Don't want provides for python shared objects +%if %{with_python2} %{?filter_provides_in: %filter_provides_in %{python_sitearch}/.*\.so} +%endif +%if %{with_python3} +%{?filter_provides_in: %filter_provides_in %{python3_sitearch}/.*\.so} +%endif %{?filter_setup} %description -- 2.14.3

Note we use python_sitearch not python2_sitearch, since the former is more portable. Signed-off-by: Daniel P. Berrange <berrange@redhat.com> --- libvirt-python.spec.in | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/libvirt-python.spec.in b/libvirt-python.spec.in index f658496..7953c82 100644 --- a/libvirt-python.spec.in +++ b/libvirt-python.spec.in @@ -143,27 +143,27 @@ CFLAGS="$RPM_OPT_FLAGS" %{__python3} setup.py build %files -n python2-libvirt %defattr(-,root,root) %doc ChangeLog AUTHORS NEWS README COPYING COPYING.LESSER examples/ -%{_libdir}/python2*/site-packages/libvirt.py* -%{_libdir}/python2*/site-packages/libvirt_qemu.py* -%{_libdir}/python2*/site-packages/libvirt_lxc.py* -%{_libdir}/python2*/site-packages/libvirtmod* -%{_libdir}/python2*/site-packages/*egg-info +%{python_sitearch}/libvirt.py* +%{python_sitearch}/libvirt_qemu.py* +%{python_sitearch}/libvirt_lxc.py* +%{python_sitearch}/libvirtmod* +%{python_sitearch}/*egg-info %endif %if %{with_python3} %files -n python3-libvirt %defattr(-,root,root) %doc ChangeLog AUTHORS NEWS README COPYING COPYING.LESSER examples/ -%{_libdir}/python3*/site-packages/libvirt.py* -%{_libdir}/python3*/site-packages/libvirtaio.py* -%{_libdir}/python3*/site-packages/libvirt_qemu.py* -%{_libdir}/python3*/site-packages/libvirt_lxc.py* -%{_libdir}/python3*/site-packages/__pycache__/libvirt.cpython-*.py* -%{_libdir}/python3*/site-packages/__pycache__/libvirt_qemu.cpython-*.py* -%{_libdir}/python3*/site-packages/__pycache__/libvirt_lxc.cpython-*.py* -%{_libdir}/python3*/site-packages/__pycache__/libvirtaio.cpython-*.py* -%{_libdir}/python3*/site-packages/libvirtmod* -%{_libdir}/python3*/site-packages/*egg-info +%{python3_sitearch}/libvirt.py* +%{python3_sitearch}/libvirtaio.py* +%{python3_sitearch}/libvirt_qemu.py* +%{python3_sitearch}/libvirt_lxc.py* +%{python3_sitearch}/__pycache__/libvirt.cpython-*.py* +%{python3_sitearch}/__pycache__/libvirt_qemu.cpython-*.py* +%{python3_sitearch}/__pycache__/libvirt_lxc.cpython-*.py* +%{python3_sitearch}/__pycache__/libvirtaio.cpython-*.py* +%{python3_sitearch}/libvirtmod* +%{python3_sitearch}/*egg-info %endif %changelog -- 2.14.3

On Fri, Jan 12, 2018 at 04:06:36PM +0000, Daniel P. Berrange wrote:
Daniel P. Berrange (9): Allow disabling of python2 RPM build Allow override of which sub-RPMs to build Add checks for min supported distros Add emacs mode marker to activate rpm-spec highlighting Adapt to rename of py2 RPMs from python- to python2- prefix Turn on python3 sub-RPMs for RHEL > 7 Require libvirt native version matching py version by default Fix filtering of RPM provides for .so files Use python*_sitearch macros instead of manually defining the dir
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
participants (2)
-
Daniel P. Berrange
-
Pavel Hrdina