diff --git a/.gitignore b/.gitignore index 9e0a1d0..3362c8a 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ /Object-Pad-0.46.tar.gz /Object-Pad-0.47.tar.gz /Object-Pad-0.48.tar.gz +/Object-Pad-0.50.tar.gz diff --git a/Object-Pad-0.48-t-99exported-symbols.t-Locate-shared-object-file-wit.patch b/Object-Pad-0.48-t-99exported-symbols.t-Locate-shared-object-file-wit.patch deleted file mode 100644 index cf3682e..0000000 --- a/Object-Pad-0.48-t-99exported-symbols.t-Locate-shared-object-file-wit.patch +++ /dev/null @@ -1,39 +0,0 @@ -From b7eaa2a6f1b19c30434badfb69b4f1103c9b6a72 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= -Date: Tue, 3 Aug 2021 13:37:54 +0200 -Subject: [PATCH] t/99exported-symbols.t: Locate shared object file with - DynaLoader -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This is more portable and allows running the test against -an already installed code. - -Signed-off-by: Petr Písař ---- - t/99exported-symbols.t | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/t/99exported-symbols.t b/t/99exported-symbols.t -index a0159d7..358ffa6 100644 ---- a/t/99exported-symbols.t -+++ b/t/99exported-symbols.t -@@ -8,7 +8,13 @@ use Test::More; - $^O eq "linux" or - plan skip_all => "This test only works on Linux (or at least, ELF platforms)"; - --my $sofile = "blib/arch/auto/Object/Pad/Pad.so"; -+require Object::Pad; -+my $i; -+for (@DynaLoader::dl_modules) { -+ last if $_ eq 'Object::Pad'; -+ $i++; -+} -+my $sofile = $DynaLoader::dl_shared_objects[$i]; - - # Since we load with RTLD_GLOBAL it's important that we don't pollute the - # symbol namespace. Therefore, aside from the `boot_Object__Pad` function, the --- -2.31.1 - diff --git a/Object-Pad-0.50-t-99exported-symbols.t-Obtain-header-file-content-fr.patch b/Object-Pad-0.50-t-99exported-symbols.t-Obtain-header-file-content-fr.patch new file mode 100644 index 0000000..a3ddb57 --- /dev/null +++ b/Object-Pad-0.50-t-99exported-symbols.t-Obtain-header-file-content-fr.patch @@ -0,0 +1,50 @@ +From 8336fc91d5d4d10ab7b3345724f0f3a1a190292a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Mon, 9 Aug 2021 16:43:26 +0200 +Subject: [PATCH] t/99exported-symbols.t: Obtain header file content from + Object::Pad::ExtensionBuilder_data +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +The test did not work on installed files because there is no +object_pad.h file: + + $ perl t/99exported-symbols.t + ok 1 - No unexpected symbols found in /usr/lib64/perl5/vendor_perl/auto/Object/Pad/Pad.so + Cannot read include/object_pad.h - No such file or directory at t/99exported-symbols.t line 59. + # Tests were run but no plan was declared and done_testing() was not seen. + # Looks like your test exited with 2 just after 1. + +But content of that file is wrapped into +Object::Pad::ExtensionBuilder_data module. This patch changed the test +to inspect Object::Pad::ExtensionBuilder_data. + +Signed-off-by: Petr Písař +--- + t/99exported-symbols.t | 7 ++----- + 1 file changed, 2 insertions(+), 5 deletions(-) + +diff --git a/t/99exported-symbols.t b/t/99exported-symbols.t +index 8f0e7fb..c8987bc 100644 +--- a/t/99exported-symbols.t ++++ b/t/99exported-symbols.t +@@ -54,13 +54,10 @@ ok( !@unexpected_symbols, "No unexpected symbols found in $sofile" ) or + diag( "Symbols found:\n " . join( "\n ", @unexpected_symbols ) ); + + # Now compare to the #define'd macros in object_pad.h ++require Object::Pad::ExtensionBuilder_data; + my %macros; + { +- open my $fh, "include/object_pad.h" or +- die "Cannot read include/object_pad.h - $!"; +- +- while( <$fh> ) { +- chomp; ++ for( split(/\R/, Object::Pad::ExtensionBuilder_data::OBJECT_PAD_H()) ) { + next unless m/^#define (.*?)\(/; + + $macros{$1}++; +-- +2.31.1 + diff --git a/macros.perl-Object-Pad b/macros.perl-Object-Pad new file mode 100644 index 0000000..fa59094 --- /dev/null +++ b/macros.perl-Object-Pad @@ -0,0 +1 @@ +%perl_Object_Pad_ABI perl(:XS_Object_Pad_ABI) = %(perl -e 'require Object::Pad::ExtensionBuilder_data; print qq{$2.$1} if Object::Pad::ExtensionBuilder_data::OBJECT_PAD_H() =~ m{^#define OBJECTPAD_ABIVERSION_MINOR (\\d+)\\R#define OBJECTPAD_ABIVERSION_MAJOR (\\d+)}m') diff --git a/perl-Object-Pad.spec b/perl-Object-Pad.spec index c5b4855..1e90469 100644 --- a/perl-Object-Pad.spec +++ b/perl-Object-Pad.spec @@ -4,19 +4,21 @@ %bcond_without perl_Object_Pad_enables_optional_test Name: perl-Object-Pad -Version: 0.48 +Version: 0.50 Release: 1%{?dist} Summary: Simple syntax for lexical slot-based objects License: GPL+ or Artistic URL: https://metacpan.org/release/Object-Pad Source0: https://cpan.metacpan.org/authors/id/P/PE/PEVANS/Object-Pad-%{version}.tar.gz +Source1: macros.perl-Object-Pad # Enable t/99exported-symbols.t test to work against an installed code, -# CPAN RT#138320, proposed to an upstream. -Patch0: Object-Pad-0.48-t-99exported-symbols.t-Locate-shared-object-file-wit.patch +# CPAN RT#138634, proposed to an upstream. +Patch0: Object-Pad-0.50-t-99exported-symbols.t-Obtain-header-file-content-fr.patch BuildRequires: coreutils BuildRequires: perl-devel BuildRequires: perl-generators BuildRequires: perl-interpreter +BuildRequires: perl(:VERSION) >= 5.14 BuildRequires: perl(Config) %if %{with perl_Object_Pad_enables_Devel_MAT} BuildRequires: perl(Devel::MAT::Dumper::Helper) >= 0.41 @@ -28,7 +30,6 @@ BuildRequires: perl(warnings) BuildRequires: perl(XS::Parse::Keyword::Builder) >= 0.10 BuildRequires: perl(XS::Parse::Sublike::Builder) >= 0.10 # Run-time: -BuildRequires: perl(:VERSION) >= 5.14 BuildRequires: perl(Carp) BuildRequires: perl(DynaLoader) # experimental since perl 5.20 @@ -37,7 +38,7 @@ BuildRequires: perl(feature) # indirect not used (only with 5.20.0 <= perl < 5.31.9) BuildRequires: perl(mro) # XS::Parse::Keyword is loaded from a header file generated by ./Build.PL, -# version specified in lib/Object/Pad.xs, out-dated CPAN RT#138318 +# version specified in lib/Object/Pad.xs BuildRequires: perl(XS::Parse::Keyword) >= 0.10 # XS::Parse::Sublike is loaded from a header file generated by ./Build.PL, # version specified in lib/Object/Pad.xs @@ -71,6 +72,10 @@ Requires: perl(XS::Parse::Keyword) >= 0.10 Requires: %{perl_XS_Parse_Keyword_ABI} %endif Requires: perl(XS::Parse::Sublike) >= 0.10 +# This module maintains an ABI defined in OBJECTPAD_ABIVERSION macro at +# include/object_pad.h and checked at run time against ClassHookFuncs.ver +# field by ObjectPad_register_slot_attribute(). +Provides: perl(:Object_Pad_ABI) = 0.50 # Filter private modules %global __requires_exclude %{?__requires_exclude:%{__requires_exclude}|}^perl\\((ARole|BaseClass)\\) @@ -102,6 +107,19 @@ Requires: perl(Test::MemoryGrowth) Tests from %{name}. Execute them with "%{_libexecdir}/%{name}/test". +%package ExtensionBuilder +Summary: Build-time support for Object::Pad plugins +Requires: %{name}%{?_isa} = %{?epoch:%{epoch}:}%{version}-%{release} +Requires: perl-interpreter +Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) +# rpm for /usr/lib/rpm/macros.d directory +Requires: rpm + +%description ExtensionBuilder +This package provides a build-time helper to assist the authors in writing XS +plugins for Object::Pad. It prepares a Module::Build-driven distribution to be +able to make use of Object::Pad. + %prep %autosetup -p1 -n Object-Pad-%{version} %if !%{with perl_Object_Pad_enables_optional_test} || %{defined perl_bootstrap} @@ -121,6 +139,7 @@ perl Build.PL --installdirs=vendor --optimize="$RPM_OPT_FLAGS" ./Build install --destdir=%{buildroot} --create_packlist=0 find %{buildroot} -type f -name '*.bs' -size 0 -delete %{_fixperms} %{buildroot}/* +install -D -m 0644 -t %{buildroot}%{_rpmmacrodir} %{SOURCE1} # Install tests mkdir -p %{buildroot}/%{_libexecdir}/%{name} cp -a t %{buildroot}/%{_libexecdir}/%{name} @@ -141,13 +160,25 @@ export HARNESS_OPTIONS=j$(perl -e 'if ($ARGV[0] =~ /.*-j([0-9][0-9]*).*/) {print %license LICENSE %doc Changes README %{perl_vendorarch}/auto/* -%{perl_vendorarch}/Object* -%{_mandir}/man3/* +%dir %{perl_vendorarch}/Object +%{perl_vendorarch}/Object/Pad.pm +%dir %{perl_vendorarch}/Object/Pad +%{perl_vendorarch}/Object/Pad/MOP +%{_mandir}/man3/Object::Pad.* +%{_mandir}/man3/Object::Pad::MOP::* + +%files ExtensionBuilder +%{perl_vendorarch}/Object/Pad/ExtensionBuilder* +%{_mandir}/man3/Object::Pad::ExtensionBuilder* +%{_rpmmacrodir}/macros.%{name} %files tests %{_libexecdir}/%{name} %changelog +* Mon Aug 09 2021 Petr Pisar - 0.50-1 +- 0.50 bump + * Tue Aug 03 2021 Petr Pisar - 0.48-1 - 0.48 bump diff --git a/sources b/sources index 53abe2d..4b37911 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (Object-Pad-0.48.tar.gz) = 67f45833c96406250f09dd966b257872fea4ac381d52f040b3119ea49724ce4d310a18ff42740d4110a1a3eae7fc85de1b0c2acbaa6d83c23d9ebeaea2bce882 +SHA512 (Object-Pad-0.50.tar.gz) = fc80659472d53d7e3a49b42ab93bab3d626836bef8a385bb8d387c32d35550361ffde8be316506293bc269d3e480062298ae13bbdf3156f985396c1bf4f2368a