From dacba0b222c60b7d2ad111fef29323cb52029cc2 Mon Sep 17 00:00:00 2001 From: si-gui <245140120@qq.com> Date: Wed, 24 Jun 2020 19:20:07 +0800 Subject: [PATCH] upgrade to 1.3.0-12 --- ...k-interface-to-GObject-introspection.patch | 239 ++++++++++ 0002-Fix-file-open-for-python3.patch | 36 ++ subunit-unbundle-iso8601.patch | 12 +- subunit.spec | 409 ++++++++++++++---- 4 files changed, 602 insertions(+), 94 deletions(-) create mode 100644 0001-Migrate-Gtk-interface-to-GObject-introspection.patch create mode 100644 0002-Fix-file-open-for-python3.patch diff --git a/0001-Migrate-Gtk-interface-to-GObject-introspection.patch b/0001-Migrate-Gtk-interface-to-GObject-introspection.patch new file mode 100644 index 0000000..2830de0 --- /dev/null +++ b/0001-Migrate-Gtk-interface-to-GObject-introspection.patch @@ -0,0 +1,239 @@ +From ad3523fd57d01c9a443e2d1b07215c001d8da91d Mon Sep 17 00:00:00 2001 +From: Haikel Guemar +Date: Fri, 30 Nov 2018 14:30:08 +0100 +Subject: [PATCH] Migrate Gtk interface to GObject introspection + +Filters subunit2gtk and subunit-notify now uses GObject introspection +Both are compatible with python2 and python3 +--- + filters/subunit-notify | 10 +++--- + filters/subunit2gtk | 80 +++++++++++++++++++++--------------------- + 2 files changed, 45 insertions(+), 45 deletions(-) + +diff --git a/filters/subunit-notify b/filters/subunit-notify +index bc833da..71da071 100755 +--- a/filters/subunit-notify ++++ b/filters/subunit-notify +@@ -16,15 +16,15 @@ + + """Notify the user of a finished test run.""" + +-import pygtk +-pygtk.require('2.0') +-import pynotify ++import gi ++gi.require_version('Gtk', '3.0') ++from gi.repository import Notify + from testtools import StreamToExtendedDecorator + + from subunit import TestResultStats + from subunit.filters import run_filter_script + +-if not pynotify.init("Subunit-notify"): ++if not Notify.init("Subunit-notify"): + sys.exit(1) + + +@@ -39,7 +39,7 @@ def notify_of_result(result): + result.passed_tests, + result.failed_tests, + ) +- nw = pynotify.Notification(summary, body) ++ nw = Notify.Notification(summary, body) + nw.show() + + +diff --git a/filters/subunit2gtk b/filters/subunit2gtk +index 78b4309..5c0ebe3 100755 +--- a/filters/subunit2gtk ++++ b/filters/subunit2gtk +@@ -49,9 +49,9 @@ import sys + import threading + import unittest + +-import pygtk +-pygtk.require('2.0') +-import gtk, gtk.gdk, gobject ++import gi ++gi.require_version('Gtk', '3.0') ++from gi.repository import Gtk, GObject + + from testtools import StreamToExtendedDecorator + +@@ -75,64 +75,64 @@ class GTKTestResult(unittest.TestResult): + self.not_ok_label = None + self.total_tests = None + +- self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) ++ self.window = Gtk.Window(Gtk.WindowType.TOPLEVEL) + self.window.set_resizable(True) + +- self.window.connect("destroy", gtk.main_quit) ++ self.window.connect("destroy", Gtk.main_quit) + self.window.set_title("Tests...") + self.window.set_border_width(0) + +- vbox = gtk.VBox(False, 5) ++ vbox = Gtk.VBox(False, 5) + vbox.set_border_width(10) + self.window.add(vbox) + vbox.show() + + # Create a centering alignment object +- align = gtk.Alignment(0.5, 0.5, 0, 0) ++ align = Gtk.Alignment.new(0.5, 0.5, 0, 0) + vbox.pack_start(align, False, False, 5) + align.show() + + # Create the ProgressBar +- self.pbar = gtk.ProgressBar() ++ self.pbar = Gtk.ProgressBar() + align.add(self.pbar) + self.pbar.set_text("Running") + self.pbar.show() + self.progress_model = ProgressModel() + +- separator = gtk.HSeparator() ++ separator = Gtk.HSeparator() + vbox.pack_start(separator, False, False, 0) + separator.show() + + # rows, columns, homogeneous +- table = gtk.Table(2, 3, False) ++ table = Gtk.Table(2, 3, False) + vbox.pack_start(table, False, True, 0) + table.show() + # Show summary details about the run. Could use an expander. +- label = gtk.Label("Run:") +- table.attach(label, 0, 1, 1, 2, gtk.EXPAND | gtk.FILL, +- gtk.EXPAND | gtk.FILL, 5, 5) ++ label = Gtk.Label(label="Run:") ++ table.attach(label, 0, 1, 1, 2, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, ++ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) + label.show() +- self.run_label = gtk.Label("N/A") +- table.attach(self.run_label, 1, 2, 1, 2, gtk.EXPAND | gtk.FILL, +- gtk.EXPAND | gtk.FILL, 5, 5) ++ self.run_label = Gtk.Label(label="N/A") ++ table.attach(self.run_label, 1, 2, 1, 2, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, ++ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) + self.run_label.show() + +- label = gtk.Label("OK:") +- table.attach(label, 0, 1, 2, 3, gtk.EXPAND | gtk.FILL, +- gtk.EXPAND | gtk.FILL, 5, 5) ++ label = Gtk.Label(label="OK:") ++ table.attach(label, 0, 1, 2, 3, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, ++ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) + label.show() +- self.ok_label = gtk.Label("N/A") +- table.attach(self.ok_label, 1, 2, 2, 3, gtk.EXPAND | gtk.FILL, +- gtk.EXPAND | gtk.FILL, 5, 5) ++ self.ok_label = Gtk.Label(label="N/A") ++ table.attach(self.ok_label, 1, 2, 2, 3, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, ++ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) + self.ok_label.show() + +- label = gtk.Label("Not OK:") +- table.attach(label, 0, 1, 3, 4, gtk.EXPAND | gtk.FILL, +- gtk.EXPAND | gtk.FILL, 5, 5) ++ label = Gtk.Label(label="Not OK:") ++ table.attach(label, 0, 1, 3, 4, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, ++ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) + label.show() +- self.not_ok_label = gtk.Label("N/A") +- table.attach(self.not_ok_label, 1, 2, 3, 4, gtk.EXPAND | gtk.FILL, +- gtk.EXPAND | gtk.FILL, 5, 5) ++ self.not_ok_label = Gtk.Label(label="N/A") ++ table.attach(self.not_ok_label, 1, 2, 3, 4, Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, ++ Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, 5, 5) + self.not_ok_label.show() + + self.window.show() +@@ -142,7 +142,7 @@ class GTKTestResult(unittest.TestResult): + + def stopTest(self, test): + super(GTKTestResult, self).stopTest(test) +- gobject.idle_add(self._stopTest) ++ GObject.idle_add(self._stopTest) + + def _stopTest(self): + self.progress_model.advance() +@@ -159,26 +159,26 @@ class GTKTestResult(unittest.TestResult): + super(GTKTestResult, self).stopTestRun() + except AttributeError: + pass +- gobject.idle_add(self.pbar.set_text, 'Finished') ++ GObject.idle_add(self.pbar.set_text, 'Finished') + + def addError(self, test, err): + super(GTKTestResult, self).addError(test, err) +- gobject.idle_add(self.update_counts) ++ GObject.idle_add(self.update_counts) + + def addFailure(self, test, err): + super(GTKTestResult, self).addFailure(test, err) +- gobject.idle_add(self.update_counts) ++ GObject.idle_add(self.update_counts) + + def addSuccess(self, test): + super(GTKTestResult, self).addSuccess(test) +- gobject.idle_add(self.update_counts) ++ GObject.idle_add(self.update_counts) + + def addSkip(self, test, reason): + # addSkip is new in Python 2.7/3.1 + addSkip = getattr(super(GTKTestResult, self), 'addSkip', None) + if callable(addSkip): + addSkip(test, reason) +- gobject.idle_add(self.update_counts) ++ GObject.idle_add(self.update_counts) + + def addExpectedFailure(self, test, err): + # addExpectedFailure is new in Python 2.7/3.1 +@@ -186,7 +186,7 @@ class GTKTestResult(unittest.TestResult): + 'addExpectedFailure', None) + if callable(addExpectedFailure): + addExpectedFailure(test, err) +- gobject.idle_add(self.update_counts) ++ GObject.idle_add(self.update_counts) + + def addUnexpectedSuccess(self, test): + # addUnexpectedSuccess is new in Python 2.7/3.1 +@@ -194,7 +194,7 @@ class GTKTestResult(unittest.TestResult): + 'addUnexpectedSuccess', None) + if callable(addUnexpectedSuccess): + addUnexpectedSuccess(test) +- gobject.idle_add(self.update_counts) ++ GObject.idle_add(self.update_counts) + + def progress(self, offset, whence): + if whence == PROGRESS_PUSH: +@@ -218,12 +218,12 @@ class GTKTestResult(unittest.TestResult): + self.ok_label.set_text(str(self.testsRun - bad)) + self.not_ok_label.set_text(str(bad)) + +-gobject.threads_init() ++GObject.threads_init() + result = StreamToExtendedDecorator(GTKTestResult()) + test = ByteStreamToStreamResult(sys.stdin, non_subunit_name='stdout') + # Get setup +-while gtk.events_pending(): +- gtk.main_iteration() ++while Gtk.events_pending(): ++ Gtk.main_iteration() + # Start IO + def run_and_finish(): + test.run(result) +@@ -232,7 +232,7 @@ t = threading.Thread(target=run_and_finish) + t.daemon = True + result.startTestRun() + t.start() +-gtk.main() ++Gtk.main() + if result.decorated.wasSuccessful(): + exit_code = 0 + else: +-- +2.19.2 + diff --git a/0002-Fix-file-open-for-python3.patch b/0002-Fix-file-open-for-python3.patch new file mode 100644 index 0000000..62e66a9 --- /dev/null +++ b/0002-Fix-file-open-for-python3.patch @@ -0,0 +1,36 @@ +From 4abf704d1baddda950450ad057c5f4be87804928 Mon Sep 17 00:00:00 2001 +From: Quique Llorente +Date: Wed, 26 Dec 2018 14:57:24 +0100 +Subject: [PATCH] Fix file open for python3 + +At python3 there is no "file" the "open" function has to be use to open +a file. +--- + python/subunit/filters.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/python/subunit/filters.py b/python/subunit/filters.py +index 0a0a185..ec7e9f3 100644 +--- a/python/subunit/filters.py ++++ b/python/subunit/filters.py +@@ -5,7 +5,7 @@ + # license at the users choice. A copy of both licenses are available in the + # project source as Apache-2.0 and BSD. You may not use this file except in + # compliance with one of these two licences. +-# ++# + # Unless required by applicable law or agreed to in writing, software + # distributed under these licenses is distributed on an "AS IS" BASIS, WITHOUT + # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +@@ -143,7 +143,7 @@ def filter_by_result(result_factory, output_path, passthrough, forward, + if output_path is None: + output_to = sys.stdout + else: +- output_to = file(output_path, 'wb') ++ output_to = open(output_path, 'w') + + try: + result = result_factory(output_to) +-- +2.19.2 + diff --git a/subunit-unbundle-iso8601.patch b/subunit-unbundle-iso8601.patch index 0929c8e..36c1051 100644 --- a/subunit-unbundle-iso8601.patch +++ b/subunit-unbundle-iso8601.patch @@ -1,5 +1,5 @@ ---- a/COPYING.orig 2018-03-24 08:22:44.000000000 -0600 -+++ b/COPYING 2018-07-03 15:07:50.241733503 -0600 +--- COPYING.orig 2018-03-24 08:22:44.000000000 -0600 ++++ COPYING 2018-07-03 15:07:50.241733503 -0600 @@ -29,8 +29,6 @@ Code that has been incorporated into Sub naturally be under its own license, and will retain that license. @@ -9,8 +9,8 @@ * The runtests.py and python/subunit/tests/TestUtil.py module are GPL test support modules. They are not installed by Subunit - they are only ever used on the build machine. Copyright 2004 Canonical Limited. ---- a/Makefile.am.orig 2018-03-24 08:22:44.000000000 -0600 -+++ b/Makefile.am 2018-07-03 15:08:08.386499408 -0600 +--- Makefile.am.orig 2018-03-24 08:22:44.000000000 -0600 ++++ Makefile.am 2018-07-03 15:08:08.386499408 -0600 @@ -16,11 +16,6 @@ EXTRA_DIST = \ perl/lib/Subunit.pm \ perl/lib/Subunit/Diff.pm \ @@ -31,8 +31,8 @@ python/subunit/progress_model.py \ python/subunit/run.py \ python/subunit/v2.py \ ---- a/README.rst.orig 2018-03-24 08:22:44.000000000 -0600 -+++ b/README.rst 2018-07-03 15:08:21.114335195 -0600 +--- README.rst.orig 2018-03-24 08:22:44.000000000 -0600 ++++ README.rst 2018-07-03 15:08:21.114335195 -0600 @@ -15,9 +15,6 @@ See the COPYING file for full details on the licensing of Subunit. diff --git a/subunit.spec b/subunit.spec index 293640f..3014356 100644 --- a/subunit.spec +++ b/subunit.spec @@ -1,36 +1,87 @@ +%if 0%{?fedora} || 0%{?rhel} >= 8 +%bcond_without python3 +%else +%bcond_with python3 +%endif + Name: subunit Version: 1.3.0 -Release: 3 -Summary: C and C++ bindings for subunit +Release: 12 +Summary: C bindings for subunit + +%global majver %(cut -d. -f-2 <<< %{version}) + License: ASL 2.0 or BSD URL: https://launchpad.net/%{name} -Source0: https://launchpad.net/%{name}/trunk/1.3/+download/%{name}-%{version}.tar.gz +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 -Patch0000: subunit-unbundle-iso8601.patch -Patch0001: subunit-decode-binary-to-unicode.patch -BuildRequires: check-devel cppunit-devel gcc-c++ libtool perl-generators perl(ExtUtils::MakeMaker) -BuildRequires: pkgconfig python2-devel python2-hypothesis python2-docutils python2-extras python2-fixtures -BuildRequires: python2-iso8601 python2-setuptools python2-testscenarios python2-testtools >= 1.8.0 +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 -BuildRequires: python3-devel python3-docutils python3-extras python3-fixtures python3-iso8601 -BuildRequires: python3-hypothesis python3-setuptools python3-testscenarios python3-testtools >= 1.8.0 -Provides: subunit-cppunit = %{version}-%{release} -Obsoletes: subunit-cppunit < %{version}-%{release} +%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 %description -Subunit C and C++ bindings. See the python-subunit package for test processing +Subunit C bindings. See the python-subunit package for test processing functionality. %package devel -Summary: Header files for developing C and C++ applications that use subunit -Requires: %{name} = %{version}-%{release} -Requires: cppunit-devel%{?_isa} -Provides: subunit-static = %{version}-%{release} subunit-cppunit-devel = %{version}-%{release} -Obsoletes: subunit-static < %{version}-%{release} subunit-cppunit-devel < %{version}-%{release} +Summary: Header files for developing C applications that use subunit +Requires: %{name}%{?_isa} = %{version}-%{release} %description devel -Header files and libraries for developing C and C++ applications that use subunit. +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. %package perl Summary: Perl bindings for subunit @@ -38,153 +89,320 @@ BuildArch: noarch Requires: perl(:MODULE_COMPAT_%{perl_version}) %description perl -Perl bindings for subunit. Log in to the relevant website for details. +Subunit perl bindings. See the python-subunit package for test +processing functionality. %package shell Summary: Shell bindings for subunit BuildArch: noarch %description shell -Shell bindings for subunit. Log in to the relevant website for details. +Subunit shell bindings. See the python-subunit package for test +processing functionality. %package -n python2-%{name} -Summary: Streaming protocol and Command line filters +Summary: Streaming protocol for test results BuildArch: noarch -Requires: python2-extras python2-iso8601 python2-testtools >= 1.8.0 -Requires: pygtk2 python2-junitxml -Provides: subunit-filters = %{version}-%{release} -Obsoletes: subunit-filters < %{version}-%{release} +Requires: python2-extras +Requires: python2-iso8601 +Requires: python2-testtools >= 1.8.0 %{?python_provide:%python_provide python2-%{name}} %description -n python2-%{name} -Subunit is a streaming protocol for test results. The package provides two functions, -one function is that streaming protocol for test results, another is that command line -filters for processing subunit streams. Log in to the relevant website for details. +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} %package -n python3-%{name} -Summary: Streaming protocol for python3 test results +Summary: Streaming protocol for test results BuildArch: noarch -Requires: python3-extras python3-iso8601 python3-testtools >= 1.8.0 +Requires: python3-extras +Requires: python3-iso8601 +Requires: python3-testtools >= 1.8.0 %{?python_provide:%python_provide python3-%{name}} %description -n python3-%{name} Subunit is a streaming protocol for test results. The protocol is a -binary encoding that is easily generated and parsed. Log in to the -relevant website for details. +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} + +%{?python_provide:%python_provide python3-%{name}-test} + +# 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 + +%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 -%autosetup -c -p1 +%setup -qc +%patch0 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +fixtimestamp() { + touch -r $1.orig $1 + rm $1.orig +} + +# Help the dependency generator for filt in filters/*; do - sed -i 's,/usr/bin/env ,/usr/bin/,' $filt - chmod 0755 $filt + 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 done -sed "/^tests_LDADD/ilibcppunit_subunit_la_LIBADD = -lcppunit libsubunit.la\n" -i Makefile.am +# Fix underlinked library +sed "/^tests_LDADD/ilibcppunit_subunit_la_LIBADD = -lcppunit libsubunit.la\n" \ + -i Makefile.am -sed -i 's,%{_bindir}/python,&2,' python/subunit/run.py +# Depend on python2, not just python +sed -i.orig 's,%{_bindir}/python,&2,' python/subunit/run.py +fixtimestamp python/subunit/run.py -for file in $(grep -Frl "%{_bindir}/env python"); do - sed -i 's,%{_bindir}/env python,%{_bindir}/python2,' $file +# 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 done -ln -fs %{python2_sitelib}/iso8601/iso8601.py python/subunit/iso8601.py +# Replace bundled code with a symlink +ln -f -s %{python2_sitelib}/iso8601/iso8601.py python/subunit/iso8601.py +# Generate the configure script autoreconf -fi +%if %{with python3} +# Prepare to build for python 3 cp -a ../%{name}-%{version} ../python3 mv ../python3 . -cd python3/ -for file in $(grep -Frl "%{_bindir}/python2"); do - sed -i 's,\(%{_bindir}/python\)2,\13,' $file +pushd python3 +for fil in $(grep -Frl "%{_bindir}/python2"); do + sed -i.orig 's,\(%{_bindir}/python\)2,\13,' $fil + fixtimestamp $fil done -ln -fs %{python3_sitelib}/iso8601/iso8601.py python/subunit/iso8601.py -cd .. +ln -f -s %{python3_sitelib}/iso8601/iso8601.py python/subunit/iso8601.py +popd +%endif + %build +# Build for everything except python3 export INSTALLDIRS=perl -%configure +%configure --enable-shared --enable-static -sed -i 's/^hardcode_libdir_flag_spec=.*/hardcode_libdir_flag_spec=""/gi; -s/^runpath_var=LD_RUN_PATH/runpath_var=DIE_RPATH_DIE/g;s/CC=.g../& -Wl,--as-needed/' libtool +# 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 -%make_build +make %{?_smp_mflags} %py2_build -cd python3/ +# Build for python3 +%if %{with python3} +pushd python3 export INSTALLDIRS=perl export PYTHON=%{_bindir}/python3 -%configure +%configure --enable-shared --enable-static -sed -i 's/^hardcode_libdir_flag_spec=.*/hardcode_libdir_flag_spec=""/g; -s/^runpath_var=LD_RUN_PATH/runpath_var=DIE_RPATH_DIE/g; s/CC=.g../& -Wl,--as-needed/' libtool +# 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 -%make_build +make %{?_smp_mflags} %py3_build -cd ../ +popd +%endif %install -cd python3/ -%py3_install -chmod 0755 %{buildroot}%{python3_sitelib}/%{name}/run.py - -ln -fs %{python3_sitelib}/iso8601/iso8601.py \ - %{buildroot}%{python3_sitelib}/subunit/iso8601.py -for file in iso8601.cpython-37.opt-1.pyc iso8601.cpython-37.pyc; do - ln -fs %{python3_sitelib}/iso8601/__pycache__/$file \ - %{buildroot}%{python3_sitelib}/subunit/__pycache__/$file -done - -cd .. -%make_install - +# Install for python 2 first so that the python 3 install overwrites files %py2_install -for file in iso8601.py iso8601.pyc iso8601.pyo; do - ln -fs %{python2_sitelib}/iso8601/$file %{buildroot}%{python2_sitelib}/subunit/$file +%if %{with python3} +pushd python3 +%py3_install +chmod 0755 %{buildroot}%{python3_sitelib}/%{name}/run.py +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 + +# Replace bundled code with a symlink again +ln -f -s %{python3_sitelib}/iso8601/iso8601.py \ + %{buildroot}%{python3_sitelib}/subunit/iso8601.py +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 +done +popd +%endif + +# 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 + +# We set pkgpython_PYTHON for efficiency to disable automake python compilation +%make_install pkgpython_PYTHON='' INSTALL="%{_bindir}/install -p" + +# 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 done -install -d %{buildroot}%{_sysconfdir}/profile.d +# Install the shell interface +mkdir -p %{buildroot}%{_sysconfdir}/profile.d cp -p shell/share/%{name}.sh %{buildroot}%{_sysconfdir}/profile.d -%delete_la +# Remove unwanted libtool files +rm -f %{buildroot}%{_libdir}/*.la -install -d %{buildroot}%{perl_vendorlib} +# Fix perl installation +mkdir -p %{buildroot}%{perl_vendorlib} mv %{buildroot}%{perl_privlib}/Subunit* %{buildroot}%{perl_vendorlib} -rm -rf %{buildroot}%{perl_archlib} +rm -fr %{buildroot}%{perl_archlib} -chmod 0755 %{buildroot}%{python2_sitelib}/%{name}/run.py %{buildroot}%{_bindir}/subunit-diff +# 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 %check +# Run the tests for python2 export LD_LIBRARY_PATH=$PWD/.libs export PYTHONPATH=$PWD/python/subunit:$PWD/python/subunit/tests make check +# Make sure subunit.iso8601 is importable from buildroot PYTHONPATH=%{buildroot}%{python2_sitelib} %{__python2} -c "import subunit.iso8601" -cd python3/ +%if %{with python3} && 0%{?!disable_tests} +# Run the tests for python3 +pushd python3 export PYTHON=%{__python3} make check +# Make sure subunit.iso8601 is importable from buildroot PYTHONPATH=%{buildroot}%{python3_sitelib} %{__python3} -c "import subunit.iso8601" -cd ../ +popd +%endif + +%ldconfig_scriptlets +%ldconfig_scriptlets cppunit -%post -p /sbin/ldconfig -%postun -p /sbin/ldconfig %files %doc NEWS README.rst %license Apache-2.0 BSD COPYING %{_libdir}/lib%{name}.so.* -%{_libdir}/libcppunit_%{name}.so.* %files devel -%doc c/README c++/README +%doc c/README %dir %{_includedir}/%{name}/ %{_includedir}/%{name}/child.h -%{_libdir}/lib*.so -%{_libdir}/pkgconfig/lib*.pc -%{_libdir}/*.a +%{_libdir}/lib%{name}.so +%{_libdir}/pkgconfig/lib%{name}.pc + +%files cppunit +%{_libdir}/libcppunit_%{name}.so.* + +%files cppunit-devel +%doc c++/README %{_includedir}/%{name}/SubunitTestProgressListener.h +%{_libdir}/libcppunit_%{name}.so +%{_libdir}/pkgconfig/libcppunit_%{name}.pc %files perl %license Apache-2.0 BSD COPYING @@ -198,16 +416,31 @@ cd ../ %files -n python2-%{name} %license Apache-2.0 BSD COPYING -%{_bindir}/* %{python2_sitelib}/%{name}/ %{python2_sitelib}/python_%{name}-%{version}-*.egg-info -%exclude %{_bindir}/%{name}-diff +%exclude %{python2_sitelib}/%{name}/tests/ +%if %{with python3} %files -n python3-%{name} %license Apache-2.0 BSD COPYING %{python3_sitelib}/%{name}/ %{python3_sitelib}/python_%{name}-%{version}-*.egg-info +%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 %changelog +* Wed Jun 24 2020 sunguoshuai - 1.3.0-12 +- Update to 1.3.0-12 + * Thu Dec 5 2019 wanjiankang - 1.3.0-3 - Initial RPM