3939%global proton_vendored_version 0.38.0
4040%define proton_install_prefix %{_builddir}/qpid-proton-%{proton_vendored_version}/install
4141
42+ %global python_minimum_version 3.9.0
4243%global proton_minimum_version 0.34.0
4344%global libwebsockets_minimum_version 3.0.1
4445%global libnghttp2_minimum_version 1.33.0
@@ -51,7 +52,8 @@ License: ASL 2.0
5152URL: https://skupper.io
5253VCS: {{{ git_dir_vcs }}}
5354
54- Requires: python3
55+ %{?fedora:Requires: python3 >= %{python_minimum_version}}
56+ %{?rhel:Requires: python39 >= %{python_minimum_version}}
5557Requires: skupper-router-common == %{version}
5658Requires: libwebsockets >= %{libwebsockets_minimum_version}
5759Requires: libnghttp2 >= %{libnghttp2_minimum_version}
@@ -63,19 +65,28 @@ BuildRequires: gcc-c++
6365BuildRequires: cmake
6466
6567# skupper-router requirements
66- BuildRequires: python3-devel
67- BuildRequires: python3-setuptools
68+ %{?fedora:BuildRequires: python3-devel >= %{python_minimum_version}}
69+ %{?fedora:BuildRequires: python3-setuptools}
70+ %{?fedora:BuildRequires: python3-pip}
71+ # without wheel the installed files lack `python_qpid_proton-0.37.0.dist-info`
72+ %{?fedora:BuildRequires: python3-wheel}
73+ %{?rhel:BuildRequires: python39-devel >= %{python_minimum_version}}
74+ %{?rhel:BuildRequires: python39-setuptools}
75+ %{?rhel:BuildRequires: python39-pip}
76+ %{?rhel:BuildRequires: python39-wheel}
77+ %{?rhel:BuildRequires: python39-rpm-macros}
6878BuildRequires: libwebsockets-devel >= %{libwebsockets_minimum_version}
6979BuildRequires: libnghttp2-devel >= %{libnghttp2_minimum_version}
7080# man pages --help
7181BuildRequires: asciidoc
72- BuildRequires: python3-qpid-proton >= %{proton_minimum_version}
7382# check ctest
7483BuildRequires: cyrus-sasl-plain
7584
7685# proton-c requirements
7786BuildRequires: openssl-devel
7887BuildRequires: cyrus-sasl-devel
88+ # python-qpid-proton requirements
89+ BuildRequires: swig
7990
8091# skupper-router sources
8192Source0: {{{ git_dir_pack }}}
@@ -97,7 +108,8 @@ cd %{_builddir}/qpid-proton-%{proton_vendored_version}
97108 -DCMAKE_C_FLAGS="$CFLAGS -Wno-error=deprecated-declarations" \
98109 -DBUILD_EXAMPLES=OFF \
99110 -DBUILD_TESTING=OFF \
100- -DBUILD_BINDINGS=OFF \
111+ -DBUILD_BINDINGS=python \
112+ -DPython_EXECUTABLE=%{python3} \
101113 -DBUILD_TLS=ON -DSSL_IMPL=openssl \
102114 -DBUILD_STATIC_LIBS=ON \
103115 -DCMAKE_POLICY_DEFAULT_CMP0069=NEW -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON \
@@ -106,6 +118,8 @@ cd %{_builddir}/qpid-proton-%{proton_vendored_version}
106118%__cmake --install "%{__cmake_builddir}"
107119
108120cd %{_builddir}/skupper-router
121+ # for `import proton` when rendering sktools --help to manpages
122+ source %{_builddir}/qpid-proton-%{proton_vendored_version}/%{__cmake_builddir}/config.sh
109123%cmake \
110124 -DVERSION="%{version}" \
111125 -DPython_EXECUTABLE=%{python3} \
@@ -115,12 +129,14 @@ cd %{_builddir}/skupper-router
115129%cmake_build --target all --target man
116130
117131%install
132+ # this will install all-in-one cpython .so module with proton inside
133+ %python3 -m pip install --target "%{buildroot}/usr/lib/skupper-router/python/" %{_builddir}/qpid-proton-%{proton_vendored_version}/%{__cmake_builddir}/python/pkgs/python-qpid-proton-*.tar.gz
118134cd %{_builddir}/skupper-router
119135%cmake_install
120136
121137%check
122- cd %{_builddir}/skupper-router
123- % ctest
138+ cd %{_builddir}/skupper-router/%{__cmake_builddir}
139+ PYTHONPATH="%{buildroot}/usr/lib/skupper-router/python/" %__ctest --output-on-failure --force-new- ctest-process %{?_smp_mflags}
124140
125141%files
126142/usr/sbin/skrouterd
@@ -140,21 +156,26 @@ cd %{_builddir}/skupper-router
140156
141157%package common
142158Summary: Internal code shared between the router daemon and the tools
143- BuildArch: noarch
159+ # BuildArch: noarch # due to binary proton
144160Requires: python3
145- Requires: python3-qpid-proton >= %{proton_minimum_version}
146161
147162%description common
148163%{summary}.
149164
150165%files common
166+ # -tools and -tests depend on this
167+ /usr/lib/skupper-router/python/cproton.py
168+ /usr/lib/skupper-router/python/proton
169+ /usr/lib/skupper-router/python/python_qpid_proton-*.dist-info
170+ /usr/lib/skupper-router/python/_cproton.cpython-*-*-linux-gnu.so
171+ /usr/lib/skupper-router/python/__pycache__/cproton.cpython-*.pyc
172+ # skupper-router, -tools, and -tests depend on this
151173/usr/lib/skupper-router/python/skupper_router_internal/
152174
153175%package tools
154176Summary: The skstat and skmanage tools for skrouterd
155177BuildArch: noarch
156178Requires: python3
157- Requires: python3-qpid-proton >= %{proton_minimum_version}
158179Requires: skupper-router-common == %{version}
159180Requires: cyrus-sasl-plain
160181Requires: cyrus-sasl-gssapi
@@ -172,7 +193,6 @@ Requires: cyrus-sasl-gssapi
172193%package tests
173194Summary: Tests for the skupper router and the tools
174195Requires: python3
175- Requires: python3-qpid-proton >= %{proton_minimum_version}
176196Requires: skupper-router == %{version}
177197Requires: skupper-router-tools == %{version}
178198Requires: cyrus-sasl-plain
0 commit comments