Currently, the 'ovstest' package is not included in the default setup.py
configuration. However, downstream packaging guidelines (such as the new
Fedora Python Packaging Guidelines [1]) imply that all files installed
into Python library directories should be managed by standard PyPA tools
like setuptools.

Add a separate setup.py for ovstest (in python/ovstest/), allowing it to
be built and installed as its own independent Python package. This avoids
coupling it to the main 'ovs' package build and lets packagers install it
using standard Python build mechanisms.

This package is a dependency for utilities such as 'ovs-l3ping' and
'ovs-test'.

[1] https://docs.fedoraproject.org/en-US/packaging-guidelines/Python/

Signed-off-by: Timothy Redaelli <[email protected]>
---
v2 -> v3:
  Fix some problems found by ovsrobot:
   - automake.mk: Use ovstest-$(@F).tmp instead of [email protected] for the temp
     file in the ovstest/setup.py generation rule.  Using [email protected] wrote
     to the read-only source tree during 'make distcheck', and $(@F).tmp
     alone would collide with the existing python/setup.py rule (both
     expand to setup.py.tmp).
   - openvswitch-fedora.spec.in: Add python3-setuptools to BuildRequires.
     The %generate_buildrequires section dynamically determines this
     dependency, but raw rpmbuild (used by 'make rpm-fedora' and CI)
     does not handle multi-pass dependency resolution.
v1 -> v2:
  - Instead of using an environment variable (enable_ovstest) to
    conditionally include ovstest in the ovs package, add a separate
    setup.py inside python/ovstest/ to build ovstest as its own
    independent Python package (as requested by Adrián)
---
 python/automake.mk               | 10 ++++
 python/ovstest/setup.py.template | 35 ++++++++++++++
 rhel/openvswitch-fedora.spec.in  | 82 ++++++++++++++++++++++++++------
 3 files changed, 113 insertions(+), 14 deletions(-)
 create mode 100644 python/ovstest/setup.py.template

diff --git a/python/automake.mk b/python/automake.mk
index 060d76cb7..00868965a 100644
--- a/python/automake.mk
+++ b/python/automake.mk
@@ -95,6 +95,7 @@ EXTRA_DIST += \
        python/ovs/flowviz/ovs-flowviz.conf \
        python/README.rst \
        python/setup.py \
+       python/ovstest/setup.py \
        python/test_requirements.txt
 
 # C extension support.
@@ -178,6 +179,15 @@ $(srcdir)/python/setup.py: python/setup.py.template 
config.status
 EXTRA_DIST += python/setup.py.template
 CLEANFILES += python/setup.py
 
+ALL_LOCAL += $(srcdir)/python/ovstest/setup.py
+$(srcdir)/python/ovstest/setup.py: python/ovstest/setup.py.template 
config.status
+       $(AM_V_GEN)sed \
+               -e 's,[@]VERSION[@],$(VERSION),g' \
+               < $(srcdir)/python/ovstest/setup.py.template > 
ovstest-$(@F).tmp && \
+       if cmp -s ovstest-$(@F).tmp $@; then touch $@; else cp 
ovstest-$(@F).tmp $@; fi; rm ovstest-$(@F).tmp
+EXTRA_DIST += python/ovstest/setup.py.template
+CLEANFILES += python/ovstest/setup.py
+
 EXTRA_DIST += python/TODO.rst
 
 $(srcdir)/python/ovs/flow/ofp_fields.py: 
$(srcdir)/build-aux/gen_ofp_field_decoders include/openvswitch/meta-flow.h
diff --git a/python/ovstest/setup.py.template b/python/ovstest/setup.py.template
new file mode 100644
index 000000000..b3721bf52
--- /dev/null
+++ b/python/ovstest/setup.py.template
@@ -0,0 +1,35 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import setuptools
+
+VERSION = "@VERSION@"
+
+setuptools.setup(
+    name='ovstest',
+    description='Open vSwitch test utilities library',
+    version=VERSION,
+    url='http://www.openvswitch.org/',
+    author='Open vSwitch',
+    author_email='[email protected]',
+    packages=['ovstest'],
+    package_dir={'ovstest': '.'},
+    keywords=['openvswitch', 'ovs', 'test'],
+    license='Apache 2.0',
+    classifiers=[
+        'Development Status :: 5 - Production/Stable',
+        'Topic :: System :: Networking',
+        'License-Expression :: Apache 2.0',
+        'Programming Language :: Python :: 3',
+        'Programming Language :: Python :: 3.7',
+    ],
+)
diff --git a/rhel/openvswitch-fedora.spec.in b/rhel/openvswitch-fedora.spec.in
index 38fbee727..5bec57078 100644
--- a/rhel/openvswitch-fedora.spec.in
+++ b/rhel/openvswitch-fedora.spec.in
@@ -61,7 +61,7 @@ Source: 
http://openvswitch.org/releases/%{name}-%{version}.tar.gz
 BuildRequires: gcc gcc-c++
 BuildRequires: autoconf automake libtool
 BuildRequires: systemd-units openssl openssl-devel
-BuildRequires: python3-devel
+BuildRequires: python3-devel python3-setuptools
 BuildRequires: desktop-file-utils
 BuildRequires: groff graphviz
 BuildRequires: checkpolicy, selinux-policy-devel
@@ -99,6 +99,11 @@ Obsoletes: openvswitch-controller <= 0:2.1.0-1
 %bcond_without check
 %bcond_with check_datapath_kernel
 
+%if 0%{?rhel}
+# sortedcontainers are not packaged on RHEL yet, but ovs includes it
+%global __requires_exclude ^python%{python3_version}dist\\(sortedcontainers\\)$
+%endif
+
 %description
 Open vSwitch provides standard network bridging functions and
 support for the OpenFlow protocol for remote per-flow control of
@@ -116,8 +121,10 @@ Tailored Open vSwitch SELinux policy
 %package -n python3-openvswitch
 Summary: Open vSwitch python3 bindings
 License: ASL 2.0
-BuildArch: noarch
+%if (0%{?fedora} && 0%{?fedora} < 31) || (0%{?rhel} && 0%{?rhel} < 9)
+%{?python_provide:%python_provide python3-openvswitch = %{version}-%{release}}
 Requires: python3
+%endif
 
 # DNS resolution support in Python IDL.
 Suggests: python3-unbound
@@ -126,15 +133,14 @@ Suggests: python3-netaddr python3-pyparsing
 # Dependencies of ovs-flowviz.
 Suggests: python3-click python3-graphviz python3-rich
 
-%{?python_provide:%python_provide python3-openvswitch = %{version}-%{release}}
-
 %description -n python3-openvswitch
 Python bindings for the Open vSwitch database
 
 %package test
 Summary: Open vSwitch testing utilities
 License: ASL 2.0
-BuildArch: noarch
+Requires: python3-openvswitch = %{version}-%{release}
+Requires: tcpdump
 
 %description test
 Utilities that are useful to diagnose performance and connectivity
@@ -163,7 +169,9 @@ service.
 %package ipsec
 Summary: Open vSwitch IPsec tunneling support
 License: ASL 2.0
-Requires: openvswitch python3-openvswitch libreswan
+Requires: openvswitch = %{version}-%{release}
+Requires: python3-openvswitch = %{version}-%{release}
+Requires: libreswan
 
 %description ipsec
 This package provides IPsec tunneling support for OVS tunnels.
@@ -171,6 +179,17 @@ This package provides IPsec tunneling support for OVS 
tunnels.
 %prep
 %setup -q
 
+%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9
+%generate_buildrequires
+cd python
+# sortedcontainers are not packaged on RHEL yet, but ovs includes it
+%if 0%{?rhel} >= 9
+%pyproject_buildrequires -R
+%else
+%pyproject_buildrequires
+%endif
+%endif
+
 %build
 %configure \
 %if %{with libcapng}
@@ -208,6 +227,26 @@ build-aux/dpdkstrip.py \
 make %{?_smp_mflags}
 make selinux-policy
 
+pushd python
+(
+export CPPFLAGS="-I $PWD/../include"
+export LDFLAGS="%{__global_ldflags} -L $PWD/../lib/.libs"
+%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9
+%pyproject_wheel
+%else
+%py3_build
+%endif
+)
+popd
+
+pushd python/ovstest
+%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9
+%pyproject_wheel
+%else
+%py3_build
+%endif
+popd
+
 %install
 rm -rf $RPM_BUILD_ROOT
 make install DESTDIR=$RPM_BUILD_ROOT
@@ -248,12 +287,17 @@ install -p -m 0755 
rhel/etc_sysconfig_network-scripts_ifdown-ovs \
 install -p -m 0755 rhel/etc_sysconfig_network-scripts_ifup-ovs \
         $RPM_BUILD_ROOT/%{_sysconfdir}/sysconfig/network-scripts/ifup-ovs
 
-install -d -m 0755 $RPM_BUILD_ROOT%{python3_sitelib}
-cp -a $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/* \
-   $RPM_BUILD_ROOT%{python3_sitelib}
-
-mv $RPM_BUILD_ROOT%{python3_sitelib}/ovs/flowviz/ovs-flowviz \
-   $RPM_BUILD_ROOT/%{_bindir}/ovs-flowviz
+pushd python
+%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9
+%pyproject_install
+%else
+%py3_install
+pushd ovstest
+%py3_install
+popd
+%endif
+[ -f "$RPM_BUILD_ROOT/%{python3_sitearch}/ovs/_json$(python3-config 
--extension-suffix)" ]
+popd
 
 rm -rf $RPM_BUILD_ROOT/%{_datadir}/openvswitch/python/
 
@@ -410,7 +454,12 @@ fi
 %files -n python3-openvswitch
 %{_bindir}/ovs-flowviz
 %{_mandir}/man8/ovs-flowviz.8*
-%{python3_sitelib}/ovs
+%{python3_sitearch}/ovs/
+%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9
+%{python3_sitearch}/ovs-%{version}.dist-info/
+%else
+%{python3_sitearch}/ovs-%{version}-py%{python3_version}.egg-info/
+%endif
 
 %files test
 %{_bindir}/ovs-test
@@ -426,7 +475,12 @@ fi
 %{_mandir}/man1/ovs-pcap.1*
 %{_mandir}/man8/ovs-tcpdump.8*
 %{_mandir}/man1/ovs-tcpundump.1*
-%{python3_sitelib}/ovstest
+%{python3_sitelib}/ovstest/
+%if 0%{?fedora} >= 31 || 0%{?rhel} >= 9
+%{python3_sitelib}/ovstest-%{version}.dist-info/
+%else
+%{python3_sitelib}/ovstest-%{version}-py%{python3_version}.egg-info/
+%endif
 
 %files devel
 %{_libdir}/lib*.so
-- 
2.53.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to