summaryrefslogtreecommitdiff
path: root/gnu/usr.bin
diff options
context:
space:
mode:
authorAndrew Fresh <afresh1@cvs.openbsd.org>2021-03-04 01:13:12 +0000
committerAndrew Fresh <afresh1@cvs.openbsd.org>2021-03-04 01:13:12 +0000
commit22388280787bee1087049144d4f851e9bc237bce (patch)
tree360aef55fbb104b3f1309d4e48b8cfb791ea7b48 /gnu/usr.bin
parent6dae7774c45aee7fe56623eab9573002e79889d2 (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.PL166
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;