subunit/subunit.spec

447 lines
14 KiB
RPMSpec
Raw Normal View History

2020-06-24 19:20:07 +08:00
%if 0%{?fedora} || 0%{?rhel} >= 8
%bcond_without python3
%else
%bcond_with python3
%endif
2019-12-09 19:58:38 +08:00
Name: subunit
Version: 1.3.0
2020-06-24 19:20:07 +08:00
Release: 12
Summary: C bindings for subunit
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
%global majver %(cut -d. -f-2 <<< %{version})
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
License: ASL 2.0 or BSD
URL: https://launchpad.net/%{name}
Source0: https://launchpad.net/%{name}/trunk/%{majver}/+download/%{name}-%{version}.tar.gz
# Fedora-specific patch: remove the bundled copy of python-iso8601.
Patch0: %{name}-unbundle-iso8601.patch
# Merged upsteam: https://github.com/testing-cabal/subunit/pull/10
Patch1: %{name}-decode-binary-to-unicode.patch
# Migrate Gtk interface to GObject introspection
# Upstream PR: https://github.com/testing-cabal/subunit/pull/34
Patch2: 0001-Migrate-Gtk-interface-to-GObject-introspection.patch
# Fix python3
# Upstream PR: https://github.com/testing-cabal/subunit/pull/36
Patch3: 0002-Fix-file-open-for-python3.patch
BuildRequires: check-devel
BuildRequires: cppunit-devel
BuildRequires: gcc-c++
BuildRequires: libtool
BuildRequires: perl-generators
BuildRequires: perl(ExtUtils::MakeMaker)
BuildRequires: pkgconfig
BuildRequires: python2-devel
BuildRequires: python2-hypothesis
BuildRequires: python2-docutils
BuildRequires: python2-extras
BuildRequires: python2-fixtures
BuildRequires: python2-iso8601
BuildRequires: python2-setuptools
BuildRequires: python2-testscenarios
BuildRequires: python2-testtools >= 1.8.0
%if %{with python3}
BuildRequires: python3-devel
BuildRequires: python3-docutils
BuildRequires: python3-extras
BuildRequires: python3-fixtures
BuildRequires: python3-iso8601
BuildRequires: python3-hypothesis
BuildRequires: python3-setuptools
BuildRequires: python3-testscenarios
BuildRequires: python3-testtools >= 1.8.0
%endif
2019-12-09 19:58:38 +08:00
%description
2020-06-24 19:20:07 +08:00
Subunit C bindings. See the python-subunit package for test processing
2019-12-09 19:58:38 +08:00
functionality.
%package devel
2020-06-24 19:20:07 +08:00
Summary: Header files for developing C applications that use subunit
Requires: %{name}%{?_isa} = %{version}-%{release}
2019-12-09 19:58:38 +08:00
%description devel
2020-06-24 19:20:07 +08:00
Header files and libraries for developing C applications that use subunit.
%package cppunit
Summary: Subunit integration into cppunit
Requires: %{name}%{?_isa} = %{version}-%{release}
%description cppunit
Subunit integration into cppunit.
%package cppunit-devel
Summary: Header files for applications that use cppunit and subunit
Requires: %{name}-cppunit%{?_isa} = %{version}-%{release}
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
Requires: cppunit-devel%{?_isa}
%description cppunit-devel
Header files and libraries for developing applications that use cppunit
and subunit.
2019-12-09 19:58:38 +08:00
%package perl
Summary: Perl bindings for subunit
BuildArch: noarch
Requires: perl(:MODULE_COMPAT_%{perl_version})
%description perl
2020-06-24 19:20:07 +08:00
Subunit perl bindings. See the python-subunit package for test
processing functionality.
2019-12-09 19:58:38 +08:00
%package shell
Summary: Shell bindings for subunit
BuildArch: noarch
%description shell
2020-06-24 19:20:07 +08:00
Subunit shell bindings. See the python-subunit package for test
processing functionality.
2019-12-09 19:58:38 +08:00
%package -n python2-%{name}
2020-06-24 19:20:07 +08:00
Summary: Streaming protocol for test results
2019-12-09 19:58:38 +08:00
BuildArch: noarch
2020-06-24 19:20:07 +08:00
Requires: python2-extras
Requires: python2-iso8601
Requires: python2-testtools >= 1.8.0
2019-12-09 19:58:38 +08:00
%{?python_provide:%python_provide python2-%{name}}
%description -n python2-%{name}
2020-06-24 19:20:07 +08:00
Subunit is a streaming protocol for test results. The protocol is a
binary encoding that is easily generated and parsed. By design all the
components of the protocol conceptually fit into the xUnit TestCase ->
TestResult interaction.
Subunit comes with command line filters to process a subunit stream and
language bindings for python, C, C++ and shell. Bindings are easy to
write for other languages.
A number of useful things can be done easily with subunit:
- Test aggregation: Tests run separately can be combined and then
reported/displayed together. For instance, tests from different
languages can be shown as a seamless whole.
- Test archiving: A test run may be recorded and replayed later.
- Test isolation: Tests that may crash or otherwise interact badly with
each other can be run separately and then aggregated, rather than
interfering with each other.
- Grid testing: subunit can act as the necessary serialization and
deserialization to get test runs on distributed machines to be
reported in real time.
%if %{with python3}
2019-12-09 19:58:38 +08:00
%package -n python3-%{name}
2020-06-24 19:20:07 +08:00
Summary: Streaming protocol for test results
2019-12-09 19:58:38 +08:00
BuildArch: noarch
2020-06-24 19:20:07 +08:00
Requires: python3-extras
Requires: python3-iso8601
Requires: python3-testtools >= 1.8.0
2019-12-09 19:58:38 +08:00
%{?python_provide:%python_provide python3-%{name}}
%description -n python3-%{name}
Subunit is a streaming protocol for test results. The protocol is a
2020-06-24 19:20:07 +08:00
binary encoding that is easily generated and parsed. By design all the
components of the protocol conceptually fit into the xUnit TestCase ->
TestResult interaction.
Subunit comes with command line filters to process a subunit stream and
language bindings for python, C, C++ and shell. Bindings are easy to
write for other languages.
A number of useful things can be done easily with subunit:
- Test aggregation: Tests run separately can be combined and then
reported/displayed together. For instance, tests from different
languages can be shown as a seamless whole.
- Test archiving: A test run may be recorded and replayed later.
- Test isolation: Tests that may crash or otherwise interact badly with
each other can be run separately and then aggregated, rather than
interfering with each other.
- Grid testing: subunit can act as the necessary serialization and
deserialization to get test runs on distributed machines to be
reported in real time.
%package -n python3-%{name}-test
Summary: Test code for the python 3 subunit bindings
BuildArch: noarch
Requires: python3-%{name} = %{version}-%{release}
Requires: %{name}-filters = %{version}-%{release}
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
%{?python_provide:%python_provide python3-%{name}-test}
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# This can be removed when F29 reaches EOL
Obsoletes: python2-%{name}-test < 1.3.0-9
Provides: python2-%{name}-test = %{version}-%{release}
%description -n python3-%{name}-test
%{summary}.
%endif
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
%package filters
Summary: Command line filters for processing subunit streams
BuildArch: noarch
%if %{with python3}
Requires: python3-%{name} = %{version}-%{release}
Requires: python3-gobject
Requires: gtk3 >= 3.20
Requires: libnotify >= 0.7.7
Requires: python3-junitxml
%else
Requires: python2-%{name} = %{version}-%{release}
Requires: pygtk2
Requires: python2-junitxml
%endif
%description filters
Command line filters for processing subunit streams.
%package static
Summary: Static C library for subunit
Requires: %{name}-devel%{?_isa} = %{version}-%{release}
%description static
Subunit C bindings in a static library, for building statically linked
test cases.
%prep
%setup -qc
%patch0
%patch1 -p1
%patch2 -p1
%patch3 -p1
fixtimestamp() {
touch -r $1.orig $1
rm $1.orig
}
# Help the dependency generator
2019-12-09 19:58:38 +08:00
for filt in filters/*; do
2020-06-24 19:20:07 +08:00
sed 's,/usr/bin/env ,/usr/bin/,' $filt > ${filt}.new
%if %{with python3}
# Fix filters to use python3
sed -i 's,\(%{_bindir}/python\),\13,' ${filt}.new
%endif
chmod 0755 ${filt}.new
touch -r $filt ${filt}.new
mv -f ${filt}.new $filt
2019-12-09 19:58:38 +08:00
done
2020-06-24 19:20:07 +08:00
# Fix underlinked library
sed "/^tests_LDADD/ilibcppunit_subunit_la_LIBADD = -lcppunit libsubunit.la\n" \
-i Makefile.am
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Depend on python2, not just python
sed -i.orig 's,%{_bindir}/python,&2,' python/subunit/run.py
fixtimestamp python/subunit/run.py
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Do not use env
for fil in $(grep -Frl "%{_bindir}/env python"); do
sed -i.orig 's,%{_bindir}/env python,%{_bindir}/python2,' $fil
fixtimestamp $fil
2019-12-09 19:58:38 +08:00
done
2020-06-24 19:20:07 +08:00
# Replace bundled code with a symlink
ln -f -s %{python2_sitelib}/iso8601/iso8601.py python/subunit/iso8601.py
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Generate the configure script
2019-12-09 19:58:38 +08:00
autoreconf -fi
2020-06-24 19:20:07 +08:00
%if %{with python3}
# Prepare to build for python 3
2019-12-09 19:58:38 +08:00
cp -a ../%{name}-%{version} ../python3
mv ../python3 .
2020-06-24 19:20:07 +08:00
pushd python3
for fil in $(grep -Frl "%{_bindir}/python2"); do
sed -i.orig 's,\(%{_bindir}/python\)2,\13,' $fil
fixtimestamp $fil
2019-12-09 19:58:38 +08:00
done
2020-06-24 19:20:07 +08:00
ln -f -s %{python3_sitelib}/iso8601/iso8601.py python/subunit/iso8601.py
popd
%endif
2019-12-09 19:58:38 +08:00
%build
2020-06-24 19:20:07 +08:00
# Build for everything except python3
2019-12-09 19:58:38 +08:00
export INSTALLDIRS=perl
2020-06-24 19:20:07 +08:00
%configure --enable-shared --enable-static
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Get rid of undesirable hardcoded rpaths; workaround libtool reordering
# -Wl,--as-needed after all the libraries.
sed -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' \
-e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' \
-e 's|CC=.g..|& -Wl,--as-needed|' \
-i libtool
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
make %{?_smp_mflags}
2019-12-09 19:58:38 +08:00
%py2_build
2020-06-24 19:20:07 +08:00
# Build for python3
%if %{with python3}
pushd python3
2019-12-09 19:58:38 +08:00
export INSTALLDIRS=perl
export PYTHON=%{_bindir}/python3
2020-06-24 19:20:07 +08:00
%configure --enable-shared --enable-static
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Get rid of undesirable hardcoded rpaths; workaround libtool reordering
# -Wl,--as-needed after all the libraries.
sed -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' \
-e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' \
-e 's|CC=.g..|& -Wl,--as-needed|' \
-i libtool
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
make %{?_smp_mflags}
2019-12-09 19:58:38 +08:00
%py3_build
2020-06-24 19:20:07 +08:00
popd
%endif
2019-12-09 19:58:38 +08:00
%install
2020-06-24 19:20:07 +08:00
# Install for python 2 first so that the python 3 install overwrites files
%py2_install
%if %{with python3}
pushd python3
2019-12-09 19:58:38 +08:00
%py3_install
chmod 0755 %{buildroot}%{python3_sitelib}/%{name}/run.py
2020-06-24 19:20:07 +08:00
chmod 0755 %{buildroot}%{python3_sitelib}/%{name}/tests/sample-script.py
chmod 0755 %{buildroot}%{python3_sitelib}/%{name}/tests/sample-two-script.py
# Patch the test code to look for filters in _bindir
sed -i "s|root, 'filters'|'/usr', 'bin'|" \
%{buildroot}%{python3_sitelib}/%{name}/tests/test_subunit_filter.py
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Replace bundled code with a symlink again
ln -f -s %{python3_sitelib}/iso8601/iso8601.py \
2019-12-09 19:58:38 +08:00
%{buildroot}%{python3_sitelib}/subunit/iso8601.py
2020-06-24 19:20:07 +08:00
for fil in iso8601.cpython-37.opt-1.pyc iso8601.cpython-37.pyc; do
ln -f -s %{python3_sitelib}/iso8601/__pycache__/$fil \
%{buildroot}%{python3_sitelib}/subunit/__pycache__/$fil
2019-12-09 19:58:38 +08:00
done
2020-06-24 19:20:07 +08:00
popd
%endif
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Patch the test code to look for filters in _bindir
sed -i "s|root, 'filters'|'/usr', 'bin'|" \
%{buildroot}%{python2_sitelib}/%{name}/tests/test_subunit_filter.py
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# We set pkgpython_PYTHON for efficiency to disable automake python compilation
%make_install pkgpython_PYTHON='' INSTALL="%{_bindir}/install -p"
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Replace bundled code with a symlink again
for fil in iso8601.py iso8601.pyc iso8601.pyo; do
ln -f -s %{python2_sitelib}/iso8601/$fil \
%{buildroot}%{python2_sitelib}/subunit/$fil
2019-12-09 19:58:38 +08:00
done
2020-06-24 19:20:07 +08:00
# Install the shell interface
mkdir -p %{buildroot}%{_sysconfdir}/profile.d
2019-12-09 19:58:38 +08:00
cp -p shell/share/%{name}.sh %{buildroot}%{_sysconfdir}/profile.d
2020-06-24 19:20:07 +08:00
# Remove unwanted libtool files
rm -f %{buildroot}%{_libdir}/*.la
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
# Fix perl installation
mkdir -p %{buildroot}%{perl_vendorlib}
2019-12-09 19:58:38 +08:00
mv %{buildroot}%{perl_privlib}/Subunit* %{buildroot}%{perl_vendorlib}
2020-06-24 19:20:07 +08:00
rm -fr %{buildroot}%{perl_archlib}
# Fix permissions
chmod 0755 %{buildroot}%{python2_sitelib}/%{name}/run.py
chmod 0755 %{buildroot}%{_bindir}/subunit-diff
chmod 0755 %{buildroot}%{python3_sitelib}/%{name}/tests/sample-script.py
chmod 0755 %{buildroot}%{python3_sitelib}/%{name}/tests/sample-two-script.py
# Fix timestamps
touch -r c/include/%{name}/child.h %{buildroot}%{_includedir}/%{name}/child.h
touch -r c++/SubunitTestProgressListener.h \
%{buildroot}%{_includedir}/%{name}/SubunitTestProgressListener.h
touch -r perl/subunit-diff %{buildroot}%{_bindir}/subunit-diff
for fil in filters/*; do
touch -r $fil %{buildroot}%{_bindir}/$(basename $fil)
done
2019-12-09 19:58:38 +08:00
%check
2020-06-24 19:20:07 +08:00
# Run the tests for python2
2019-12-09 19:58:38 +08:00
export LD_LIBRARY_PATH=$PWD/.libs
export PYTHONPATH=$PWD/python/subunit:$PWD/python/subunit/tests
make check
2020-06-24 19:20:07 +08:00
# Make sure subunit.iso8601 is importable from buildroot
2019-12-09 19:58:38 +08:00
PYTHONPATH=%{buildroot}%{python2_sitelib} %{__python2} -c "import subunit.iso8601"
2020-06-24 19:20:07 +08:00
%if %{with python3} && 0%{?!disable_tests}
# Run the tests for python3
pushd python3
2019-12-09 19:58:38 +08:00
export PYTHON=%{__python3}
make check
2020-06-24 19:20:07 +08:00
# Make sure subunit.iso8601 is importable from buildroot
2019-12-09 19:58:38 +08:00
PYTHONPATH=%{buildroot}%{python3_sitelib} %{__python3} -c "import subunit.iso8601"
2020-06-24 19:20:07 +08:00
popd
%endif
%ldconfig_scriptlets
%ldconfig_scriptlets cppunit
2019-12-09 19:58:38 +08:00
%files
%doc NEWS README.rst
%license Apache-2.0 BSD COPYING
%{_libdir}/lib%{name}.so.*
%files devel
2020-06-24 19:20:07 +08:00
%doc c/README
2019-12-09 19:58:38 +08:00
%dir %{_includedir}/%{name}/
%{_includedir}/%{name}/child.h
2020-06-24 19:20:07 +08:00
%{_libdir}/lib%{name}.so
%{_libdir}/pkgconfig/lib%{name}.pc
%files cppunit
%{_libdir}/libcppunit_%{name}.so.*
%files cppunit-devel
%doc c++/README
2019-12-09 19:58:38 +08:00
%{_includedir}/%{name}/SubunitTestProgressListener.h
2020-06-24 19:20:07 +08:00
%{_libdir}/libcppunit_%{name}.so
%{_libdir}/pkgconfig/libcppunit_%{name}.pc
2019-12-09 19:58:38 +08:00
%files perl
%license Apache-2.0 BSD COPYING
%{_bindir}/%{name}-diff
%{perl_vendorlib}/*
%files shell
%doc shell/README
%license Apache-2.0 BSD COPYING
%config(noreplace) %{_sysconfdir}/profile.d/%{name}.sh
%files -n python2-%{name}
%license Apache-2.0 BSD COPYING
%{python2_sitelib}/%{name}/
%{python2_sitelib}/python_%{name}-%{version}-*.egg-info
2020-06-24 19:20:07 +08:00
%exclude %{python2_sitelib}/%{name}/tests/
2019-12-09 19:58:38 +08:00
2020-06-24 19:20:07 +08:00
%if %{with python3}
2019-12-09 19:58:38 +08:00
%files -n python3-%{name}
%license Apache-2.0 BSD COPYING
%{python3_sitelib}/%{name}/
%{python3_sitelib}/python_%{name}-%{version}-*.egg-info
2020-06-24 19:20:07 +08:00
%exclude %{python3_sitelib}/%{name}/tests/
%files -n python3-%{name}-test
%{python3_sitelib}/%{name}/tests/
%endif
%files static
%{_libdir}/*.a
%files filters
%{_bindir}/*
%exclude %{_bindir}/%{name}-diff
2019-12-09 19:58:38 +08:00
%changelog
2020-06-24 19:20:07 +08:00
* Wed Jun 24 2020 sunguoshuai <sunguoshuai@huawei.com> - 1.3.0-12
- Update to 1.3.0-12
2019-12-09 19:58:38 +08:00
* Thu Dec 5 2019 wanjiankang <wanjiankang@huawei.com> - 1.3.0-3
- Initial RPM