From cc3f43f592383383a0bc068042f0a11a3ca1dea1 Mon Sep 17 00:00:00 2001 From: Jakub Bogusz Date: Tue, 15 Nov 2016 18:20:10 +0100 Subject: [PATCH] - updated to 0.82 - added perl5.22,non-deterministic-failures patches to fix test failures introduced with perl 5.18+ and 5.22+ --- ...uild-perl-non-deterministic-failures.patch | 35 +++++ perl-rpm-build-perl-perl5.22.patch | 136 ++++++++++++++++++ perl-rpm-build-perl.spec | 50 +++++-- 3 files changed, 208 insertions(+), 13 deletions(-) create mode 100644 perl-rpm-build-perl-non-deterministic-failures.patch create mode 100644 perl-rpm-build-perl-perl5.22.patch diff --git a/perl-rpm-build-perl-non-deterministic-failures.patch b/perl-rpm-build-perl-non-deterministic-failures.patch new file mode 100644 index 0000000..21aa35e --- /dev/null +++ b/perl-rpm-build-perl-non-deterministic-failures.patch @@ -0,0 +1,35 @@ +From 428c3feac1e9c39f966cc66c36cc3881d202177c Mon Sep 17 00:00:00 2001 +From: Niko Tyni +Date: Sat, 18 May 2013 09:41:47 +0300 +Subject: [PATCH] Fix non-deterministic failures on newer perls + +The hash randomization changes in the Perl 5.17 series +made perl.req to occasionally fail to report the dependencies. + +Improved diagnostics report + + Use of each() on hash after insertion without resetting hash + iterator results in undefined behavior, Perl interpreter: 0x9e7010 at + /home/niko/tmp/libb-perlreq-perl-0.82/blib/lib/B/Walker.pm line 122. + +so use keys() instead of each(), as suggested by perldiag.pod. +--- + lib/B/Walker.pm | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lib/B/Walker.pm b/lib/B/Walker.pm +index b71f204..f626043 100644 +--- a/lib/B/Walker.pm ++++ b/lib/B/Walker.pm +@@ -119,7 +119,7 @@ sub walk_gv ($) { + sub walk_stash ($$); + sub walk_stash ($$) { # similar to B::walksymtable + my ($symref, $prefix) = @_; +- while (my ($sym) = each %$symref) { ++ for my $sym (keys %$symref) { + no strict 'refs'; + my $fullname = "*main::". $prefix . $sym; + if ($sym =~ /::\z/) { +-- +1.7.10.4 + diff --git a/perl-rpm-build-perl-perl5.22.patch b/perl-rpm-build-perl-perl5.22.patch new file mode 100644 index 0000000..58c7697 --- /dev/null +++ b/perl-rpm-build-perl-perl5.22.patch @@ -0,0 +1,136 @@ +From b73a37a7eb615693b5516068360f61d5b4e8f241 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= +Date: Tue, 16 Jun 2015 18:20:20 +0200 +Subject: [PATCH] Adjust to perl-5.22 +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Perl 5.22 brought changes in class/method opcodes, see perl commit + +commit b46e009d94293e069270690750f6c669c6d0ce22 +Author: syber +Date: Thu Sep 4 22:08:59 2014 +0400 + + Make OP_METHOD* to be of new class METHOP + +and optimizations in anoncode, see perl commit + +commit 01762542fcff2d3eb5e0fd287f28e872a0cfd5a4 +Author: Father Chrysostomos +Date: Sat Oct 18 10:23:26 2014 -0700 + + Use srefgen for anoncode + +and GV to IV optimizations when calling some subroutines. + +This patch implements the changes to make tests passing with perl +5.22 and previous versions too. + +CPAN RT#104885 + +Signed-off-by: Petr Písař +--- + lib/B/PerlReq.pm | 24 +++++++++++++++++++----- + lib/B/Walker.pm | 9 ++++++++- + t/01-B-PerlReq.t | 3 +++ + 3 files changed, 30 insertions(+), 6 deletions(-) + +diff --git a/lib/B/PerlReq.pm b/lib/B/PerlReq.pm +index 303454f..2e2a2ba 100644 +--- a/lib/B/PerlReq.pm ++++ b/lib/B/PerlReq.pm +@@ -44,7 +44,7 @@ our @Skip = ( + + our ($Strict, $Relaxed, $Verbose, $Debug); + +-use B::Walker qw(const_sv); ++use B::Walker qw(const_methop const_sv); + + sub RequiresPerl ($) { + my $v = shift; +@@ -273,8 +273,13 @@ my %TryCV; + sub grok_try { + return unless $INC{"Try/Tiny.pm"}; + my (undef, $op) = @_; +- return unless $op->name eq "refgen"; +- $op = $op->first->first->sibling; ++ if ($op->name eq "srefgen") { ++ $op = $op->first->first; ++ } elsif ($op->name eq "refgen") { ++ $op = $op->first->first->sibling; ++ } else { ++ return; ++ } + return unless $op->name eq "anoncode"; + my $cv = padval($op->targ); + $TryCV{$$cv} = 1; +@@ -304,7 +309,13 @@ sub grok_entersub ($) { + $op = $op->sibling; + } + if ($op->name eq "method_named") { +- my $method = const_sv($op)->PV; ++ my $method; ++ if (ref($op) eq 'B::METHOP') { ++ $method = const_methop($op); ++ } else { ++ $method = const_sv($op); ++ } ++ $method = $method->PV; + return unless $methods{$method}; + return unless $args->name eq "const"; + my $sv = const_sv($args); +@@ -316,7 +327,10 @@ sub grok_entersub ($) { + elsif ($op->first->name eq "gv") { + $op = $op->first; + use B::Walker qw(padval); +- my $func = padval($op->padix)->NAME; ++ my $padval = padval($op->padix); ++ # perl 5.22 sometimes optimizes to B::IV ++ return unless ref $padval eq 'B::GV'; ++ my $func = $padval->NAME; + return unless $funcs{$func}; + $funcs{$func}->($func, $args); + } +diff --git a/lib/B/Walker.pm b/lib/B/Walker.pm +index b71f204..9e3083c 100644 +--- a/lib/B/Walker.pm ++++ b/lib/B/Walker.pm +@@ -6,7 +6,7 @@ use strict; + + require Exporter; + our @ISA = qw(Exporter); +-our @EXPORT_OK = qw(padname padval const_sv walk); ++our @EXPORT_OK = qw(padname padval const_methop const_sv walk); + + our $CV; + +@@ -27,6 +27,13 @@ sub const_sv ($) { + return $sv; + } + ++sub const_methop ($) { ++ my $op = shift; ++ my $sv = $op->meth_sv; ++ $sv = padval($op->targ) unless $$sv; ++ return $sv; ++} ++ + our $Level = 0; + our $Line; + our $Sub; +diff --git a/t/01-B-PerlReq.t b/t/01-B-PerlReq.t +index 7233cb6..6e02759 100644 +--- a/t/01-B-PerlReq.t ++++ b/t/01-B-PerlReq.t +@@ -139,4 +139,7 @@ EOF + + cmp_ok "perl(Cwd.pm) >= 1.0", "eq", grok q(use Cwd 0==0); + ++# perl 5.22 sometimes optimizes to B::IV leading to crash ++cmp_ok "$d", "eq", grok qq(sub foo{} foo; require $m;); ++ + #END { $? = 0; } +-- +2.1.0 + diff --git a/perl-rpm-build-perl.spec b/perl-rpm-build-perl.spec index eb6680f..ff8525b 100644 --- a/perl-rpm-build-perl.spec +++ b/perl-rpm-build-perl.spec @@ -6,18 +6,25 @@ %define pdir rpm %define pnam build-perl Summary: Calculate dependencies for Perl sources -Summary(pl.UTF-8): Znajdź zależności dla źródeł perlowych +Summary(pl.UTF-8): Znajdowanie zależności dla źródeł perlowych Name: perl-rpm-build-perl -Version: 0.80 +Version: 0.82 Release: 1 -License: Artistic/GPL +License: GPL v2+ Group: Development/Languages/Perl -Source0: http://search.cpan.org/CPAN/authors/id/A/AT/ATOURBIN/%{pdir}-%{pnam}-%{version}.tar.gz -# Source0-md5: 0ce2716ea447362fa2879684b5daafe7 +Source0: http://www.cpan.org/modules/by-authors/id/A/AT/ATOURBIN/%{pdir}-%{pnam}-%{version}.tar.gz +# Source0-md5: 1cfb4f6a0842d04ef39fd945abacce91 +# https://rt.cpan.org/Ticket/Attachment/1513584/807128/rpm-build-perl-0.82-Adjust-to-perl-5.22.patch +Patch0: %{name}-perl5.22.patch +# https://rt.cpan.org/Ticket/Attachment/1213691/640915/0001-Fix-non-deterministic-failures-on-newer-perls.patch +Patch1: %{name}-non-deterministic-failures.patch URL: http://search.cpan.org/dist/rpm-build-perl/ BuildRequires: perl-devel >= 1:5.8.0 BuildRequires: rpm-perlprov >= 4.1-13 -BuildArch: noarch +%if %{with tests} +BuildRequires: perl-Encode +BuildRequires: perl-Test-Simple +%endif BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) %description @@ -28,6 +35,8 @@ Moduł ten znajduje zależności dla źródeł perlowych. %prep %setup -q -n %{pdir}-%{pnam}-%{version} +%patch0 -p1 +%patch1 -p1 %build %{__perl} Makefile.PL \ @@ -48,10 +57,25 @@ rm -rf $RPM_BUILD_ROOT %files %defattr(644,root,root,755) %doc Changes README -%attr(755,root,root) %{_bindir}/perl.* -%dir %{perl_vendorlib}/B -%{perl_vendorlib}/B/*.pm -%dir %{perl_vendorlib}/PerlReq -%{perl_vendorlib}/PerlReq/*.pm -%{perl_vendorlib}/*.pm -%{_mandir}/man?/* +%attr(755,root,root) %{_bindir}/perl.clean +%attr(755,root,root) %{_bindir}/perl.prov +%attr(755,root,root) %{_bindir}/perl.prov.files +%attr(755,root,root) %{_bindir}/perl.req +%attr(755,root,root) %{_bindir}/perl.req.files +%{perl_vendorarch}/B/Clobbers.pm +%{perl_vendorarch}/B/ConstOptree.pm +%{perl_vendorarch}/B/PerlReq.pm +%{perl_vendorarch}/B/Walker.pm +%dir %{perl_vendorarch}/PerlReq +%{perl_vendorarch}/PerlReq/Utils.pm +%{perl_vendorarch}/fake.pm +%dir %{perl_vendorarch}/auto/B +%dir %{perl_vendorarch}/auto/B/ConstOptree +%attr(755,root,root) %{perl_vendorarch}/auto/B/ConstOptree/ConstOptree.so +%{_mandir}/man1/perl.prov.1p* +%{_mandir}/man1/perl.req.1p* +%{_mandir}/man3/B::Clobbers.3pm* +%{_mandir}/man3/B::ConstOptree.3pm* +%{_mandir}/man3/B::PerlReq.3pm* +%{_mandir}/man3/B::Walker.3pm* +%{_mandir}/man3/PerlReq::Utils.3pm* -- 2.44.0