diff options
author | Andrew Fresh <afresh1@cvs.openbsd.org> | 2021-03-04 01:13:12 +0000 |
---|---|---|
committer | Andrew Fresh <afresh1@cvs.openbsd.org> | 2021-03-04 01:13:12 +0000 |
commit | 22388280787bee1087049144d4f851e9bc237bce (patch) | |
tree | 360aef55fbb104b3f1309d4e48b8cfb791ea7b48 /gnu/usr.bin | |
parent | 6dae7774c45aee7fe56623eab9573002e79889d2 (diff) |
Never automatically rewrite perl/dist/Devel-PPPort/t/01_test.t
We are never going to update the files that generate this test and
the interaction with "cvs up" means we can accidentally hit it when
they hange between releases but permissions when building the system
prevent us from writing the update and breaks the build.
Found by naddy@, krw@, and deraadt@
Diffstat (limited to 'gnu/usr.bin')
-rw-r--r-- | gnu/usr.bin/perl/dist/Devel-PPPort/Makefile.PL | 166 |
1 files changed, 130 insertions, 36 deletions
diff --git a/gnu/usr.bin/perl/dist/Devel-PPPort/Makefile.PL b/gnu/usr.bin/perl/dist/Devel-PPPort/Makefile.PL index 117f9d107aa..12d6fe35d4e 100644 --- a/gnu/usr.bin/perl/dist/Devel-PPPort/Makefile.PL +++ b/gnu/usr.bin/perl/dist/Devel-PPPort/Makefile.PL @@ -16,74 +16,103 @@ require 5.003; use strict; +BEGIN { $^W = 1; } + use ExtUtils::MakeMaker; +use Config; use vars '%opt'; # needs to be global, and we can't use 'our' +sub cat_file +{ + eval { require File::Spec }; + return $@ ? join('/', @_) : File::Spec->catfile(@_); +} + +my $t_01_test = cat_file('t', '01_test.t'); + unless ($ENV{'PERL_CORE'}) { $ENV{'PERL_CORE'} = 1 if grep { $_ eq 'PERL_CORE=1' } @ARGV; } @ARGV = map { /^--with-(apicheck)$/ && ++$opt{$1} ? () : $_ } @ARGV; -WriteMakefile( - NAME => 'Devel::PPPort', - VERSION_FROM => 'PPPort_pm.PL', - PM => { 'PPPort.pm' => '$(INST_LIBDIR)/PPPort.pm' }, - H => [ qw(ppport.h) ], - OBJECT => 'RealPPPort$(OBJ_EXT) $(O_FILES)', - XSPROTOARG => '-noprototypes', - CONFIGURE => \&configure, - META_MERGE => { - 'meta-spec' => { - version => 2, - }, - resources => { - bugtracker => { - web => 'https://rt.perl.org/rt3/', - }, - repository => { - type => 'git', - url => 'git://perl5.git.perl.org/perl.git', - web => 'https://perl5.git.perl.org/perl.git', - }, - }, +my %mf = ( + NAME => 'Devel::PPPort', + VERSION_FROM => 'PPPort_pm.PL', + PM => { 'PPPort.pm' => '$(INST_LIBDIR)/PPPort.pm' }, + H => [ qw(ppport.h) ], + OBJECT => 'RealPPPort$(OBJ_EXT) $(O_FILES)', + XSPROTOARG => '-noprototypes', + CONFIGURE => \&configure, + BUILD_REQUIRES => { + "FindBin" => "0", }, ); +WriteMakefile(%mf); sub configure { - my @clean = qw{ $(H_FILES) RealPPPort.xs RealPPPort.c }; - my %depend = ('$(OBJECT)' => '$(H_FILES)'); + my @clean = qw{ $(H_FILES) RealPPPort.xs RealPPPort.c PPPort.pm }; + my %depend = ( + '$(OBJECT)' => '$(H_FILES)', + 'Makefile' => '$(VERSION_FROM)', + ); my @C_FILES = qw{ module2.c module3.c }, my %PL_FILES = ( 'ppport_h.PL' => 'ppport.h', 'PPPort_pm.PL' => 'PPPort.pm', - 'PPPort_xs.PL' => 'RealPPPort.xs', + 'RealPPPort_xs.PL' => 'RealPPPort.xs', + #'mktests.PL' => $t_01_test, ); my @moreopts; - if (eval $ExtUtils::MakeMaker::VERSION >= 6) { + if (eval { ExtUtils::MakeMaker->VERSION(6) }) { push @moreopts, AUTHOR => 'Marcus Holland-Moritz <mhx@cpan.org>'; - if (-f 'PPPort.pm') { - push @moreopts, ABSTRACT_FROM => 'PPPort.pm'; - } + push @moreopts, ABSTRACT => 'Perl/Pollution/Portability'; } - if (eval $ExtUtils::MakeMaker::VERSION >= 6.30_01) { + if (eval { ExtUtils::MakeMaker->VERSION(6.30_01) }) { print "Setting license tag...\n"; push @moreopts, LICENSE => 'perl'; } - if ($ENV{'PERL_CORE'}) { - # Pods will be built by installman. - push @clean, 'PPPort.pm'; + if (eval { ExtUtils::MakeMaker->VERSION (6.46) }) { + open FH, '<PPPort_pm.PL' or die "cannot open PPPort_pm.PL for reading: $!"; + my $version; + my $line; + while ($line = <FH>) { + ($version) = $line =~ /^\$VERSION = '([\d.]+(_\d+)?)';$/ and last; + }; + die 'failed to extract $VERSION from PPPort_pm.PL' if not $version; + close FH; + print "Adding META_MERGE...\n"; + push @moreopts, META_MERGE => { + 'meta-spec' => { version => 2 }, + provides => { + 'Devel::PPPort' => { + file => 'PPPort.pm', + version => $version, + }, + }, + resources => { + bugtracker => { + web => 'https://github.com/Dual-Life/Devel-PPPort/issues', + }, + repository => { + type => 'git', + url => 'git://github.com/Dual-Life/Devel-PPPort.git', + web => 'https://github.com/Dual-Life/Devel-PPPort', + }, + }, + }; } - else { + + if (not $ENV{'PERL_CORE'}) { # Devel::PPPort is in the core since 5.7.3 # 5.11.0+ has site before perl push @moreopts, INSTALLDIRS => ( - ($] >= 5.007003 and $] < 5.011) + ("$]" >= 5.007003 and "$]" < 5.011) ? 'perl' : 'site' ); @@ -96,6 +125,12 @@ sub configure $depend{'apicheck.i'} = 'ppport.h'; } + if ($Config{gccversion}) { + my $define = '-W -Wall'; + $define .= ' -Wdeclaration-after-statement' if $Config{gccversion} =~ /^(\d+\.\d+)\./ && $1 >= 3.4; + push @moreopts, DEFINE => $define; + } + return { C => \@C_FILES, XS => { 'RealPPPort.xs' => 'RealPPPort.c' }, @@ -119,7 +154,7 @@ regen_pm: $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) PPPort_pm.PL regen_xs: - $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) PPPort_xs.PL + $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) RealPPPort_xs.PL regen_tests: $(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) mktests.PL @@ -133,6 +168,65 @@ POSTAMBLE return $post; } +sub MY::processPL +{ + package MY; + my $original = shift->SUPER::processPL(@_); + + require "./parts/ppptools.pl"; + my $includes = join ' ', all_files_in_dir('parts/inc'); + + my $updated = ''; + my @rules = split( m{^\s*$}m, $original ); + my $rule; + foreach $rule ( @rules ) { + if ( $rule =~ m{^\s*^PPPort\.pm\s+:}m ) { + $rule =~ s{^(\s*^PPPort\.pm\s+:.*)}{$1 $includes}m; # PPPort.pm depends on all files from parts/inc + $rule =~ s{pm_to_blib}{}m; # PPPort.pm must not depend on built PPPort.pm in blib/ + } elsif ( $rule =~ m{^\s*^ppport\.h\s+:}m ) { + $rule =~ s{^(\s*^ppport\.h\s+:.*)}{$1 PPPort.pm}m; # ppport.h depends on PPPort.pm + $rule =~ s{pm_to_blib}{}m; # ppport.h is used to build RealPPPort.xs so cannot depend on built PPPort in blib/ + } elsif ( $rule =~ m{^\s*^RealPPPort\.xs\s+:}m ) { + $rule =~ s{^(\s*^RealPPPort\.xs\s+:.*)}{$1 ppport.h}m; # RealPPPort.xs depends on ppport.h + $rule =~ s{pm_to_blib}{}m; # RealPPPort.xs is used to build PPPort binary, so it cannot depend on it + } elsif ( $rule =~ m{^\s*\S+\b01_test\.t\s+:}m ) { + $rule =~ s{^(\s*^\S+\b01_test\.t\s+:.*)}{$1 $includes}m; # all tests in t/ depends on all files from parts/inc + $rule =~ s{pm_to_blib}{}m; # Generating test files does not depend on built PPPort in blib/ + } + $updated .= $rule; + } + + # All test targets depends on pure_all target, so ensure that t/01_test.t generated by mktests.PL is up-to-date + $updated .= <<"TESTS_IN_T"; + +pure_all :: $t_01_test + \$(NOECHO) \$(NOOP) + +TESTS_IN_T + + return $updated; +} + +sub MY::dist_core +{ + package MY; + my $dist = shift->SUPER::dist_core(@_); + + my $updated = ''; + my @rules = split( m{^\s*$}m, $dist ); + my $rule; + foreach $rule ( @rules ) { + if ( $rule =~ m{^\s*^dist\s+:}m ) { + $rule =~ s{:}{: PPPort.pm manifest}; # make sure we update PPPort.pm + $rule .= qq[\t].q[$(NOECHO) $(ECHO) "Warning: Please check '__MAX_PERL__' value in PPPort_pm.PL"].qq[\n]; + } + $updated .= $rule; + } + + return $updated; +} + + sub MY::c_o { package MY; |