diff options
-rw-r--r-- | ext/Digest/MD5/hints/MacOS.pl | 3 | ||||
-rw-r--r-- | ext/POSIX/t/taint.t | 11 | ||||
-rw-r--r-- | lib/ExtUtils/MM_MacOS.pm | 59 | ||||
-rw-r--r-- | lib/Test/Harness/t/strap-analyze.t | 6 | ||||
-rw-r--r-- | lib/Test/Harness/t/test-harness.t | 6 |
5 files changed, 74 insertions, 11 deletions
diff --git a/ext/Digest/MD5/hints/MacOS.pl b/ext/Digest/MD5/hints/MacOS.pl new file mode 100644 index 0000000000..3741e832d0 --- /dev/null +++ b/ext/Digest/MD5/hints/MacOS.pl @@ -0,0 +1,3 @@ +# MWCPPC compiler needs to crank down the optimizations + +$self->{MWCPPCOptimize} = "-O1"; diff --git a/ext/POSIX/t/taint.t b/ext/POSIX/t/taint.t index fcc52c2d29..b20441f7fb 100644 --- a/ext/POSIX/t/taint.t +++ b/ext/POSIX/t/taint.t @@ -28,13 +28,18 @@ my $testfd; my $TAINT = substr($^X, 0, 0); -eval { mkfifo($TAINT. "TEST", 0) }; +# there is a bug in GUSI that causes problems trying to open +# files and directories ... it is being fixed, this is just +# a stopgap -- pudge +my $file = $^O eq 'MacOS' ? 'TEST-OLD' : 'TEST'; + +eval { mkfifo($TAINT. $file, 0) }; like($@, qr/^Insecure dependency/, 'mkfifo with tainted data'); -eval { $testfd = open($TAINT. "TEST", O_WRONLY, 0) }; +eval { $testfd = open($TAINT. $file, O_WRONLY, 0) }; like($@, qr/^Insecure dependency/, 'open with tainted data'); -eval { $testfd = open("TEST", O_RDONLY, 0) }; +eval { $testfd = open($file, O_RDONLY, 0) }; is($@, "", 'open with untainted data'); read($testfd, $buffer, 2) if $testfd > 2; diff --git a/lib/ExtUtils/MM_MacOS.pm b/lib/ExtUtils/MM_MacOS.pm index cbef99ba75..576d744730 100644 --- a/lib/ExtUtils/MM_MacOS.pm +++ b/lib/ExtUtils/MM_MacOS.pm @@ -53,6 +53,8 @@ sub new { $self = {} unless (defined $self); + check_hints($self); + my(%initial_att) = %$self; # record initial attributes if (defined $self->{CONFIGURE}) { @@ -75,6 +77,9 @@ sub new { @{"$newclass\:\:ISA"} = 'MM'; } + $ExtUtils::MakeMaker::Recognized_Att_Keys{$_} = 1 + for map { $_ . 'Optimize' } qw(MWC MWCPPC MWC68K MPW MRC MRC SC); + if (defined $ExtUtils::MakeMaker::Parent[-2]){ $self->{PARENT} = $ExtUtils::MakeMaker::Parent[-2]; my $key; @@ -154,7 +159,7 @@ END dynamic_bs dynamic_lib static_lib manifypods installbin subdirs dist_basics dist_core dist_dir dist_test dist_ci install force perldepend makefile - staticmake test pm_to_blib selfdocument cflags + staticmake test pm_to_blib selfdocument const_loadlibs const_cccmd /) { @@ -162,7 +167,7 @@ END } push @ExtUtils::MakeMaker::MM_Sections, "rulez" unless grep /rulez/, @ExtUtils::MakeMaker::MM_Sections; - + if ($self->{PARENT}) { for (qw/install dist dist_basics dist_core dist_dir dist_test dist_ci/) { $self->{SKIPHASH}{$_} = 1; @@ -868,6 +873,17 @@ $target :: $plfile join "", @m; } +sub cflags { + my($self,$libperl) = @_; + my $optimize; + + for (map { $_ . "Optimize" } qw(MWC MWCPPC MWC68K MPW MRC MRC SC)) { + $optimize .= "$_ = $self->{$_}" if exists $self->{$_}; + } + + return $self->{CFLAGS} = $optimize; +} + sub _include { # for Unix-style includes, with -I instead of -i my($inc) = @_; require File::Spec::Unix; @@ -880,6 +896,45 @@ sub _include { # for Unix-style includes, with -I instead of -i } } +# yes, these are just copies of the same routines in +# MakeMaker.pm, but with paths changed. +sub check_hints { + my($self) = @_; + # We allow extension-specific hints files. + + return unless -d ":hints"; + + # First we look for the best hintsfile we have + my($hint)="${^O}_$Config{osvers}"; + $hint =~ s/\./_/g; + $hint =~ s/_$//; + return unless $hint; + + # Also try without trailing minor version numbers. + while (1) { + last if -f ":hints:$hint.pl"; # found + } continue { + last unless $hint =~ s/_[^_]*$//; # nothing to cut off + } + my $hint_file = ":hints:$hint.pl"; + + return unless -f $hint_file; # really there + + _run_hintfile($self, $hint_file); +} + +sub _run_hintfile { + no strict 'vars'; + local($self) = shift; # make $self available to the hint file. + my($hint_file) = shift; + + local $@; + print STDERR "Processing hints file $hint_file\n"; + my $ret = do $hint_file; + unless( defined $ret ) { + print STDERR $@ if $@; + } +} 1; __END__ diff --git a/lib/Test/Harness/t/strap-analyze.t b/lib/Test/Harness/t/strap-analyze.t index 06c0966e6e..02fa1d6390 100644 --- a/lib/Test/Harness/t/strap-analyze.t +++ b/lib/Test/Harness/t/strap-analyze.t @@ -20,11 +20,11 @@ my $SAMPLE_TESTS = $ENV{PERL_CORE} : File::Spec->catdir($Curdir, 't', 'sample-tests'); -my $IsMacPerl = $^O eq 'MacOS'; +my $IsMacOS = $^O eq 'MacOS'; my $IsVMS = $^O eq 'VMS'; # VMS uses native, not POSIX, exit codes. -my $die_exit = $IsVMS ? 44 : 1; +my $die_exit = $IsVMS ? 44 : $IsMacOS ? 0 : 1; # We can only predict that the wait status should be zero or not. my $wait_non_zero = 1; @@ -470,7 +470,7 @@ while( my($test, $expect) = each %samples ) { delete $results{details}; SKIP: { - skip '$? unreliable in MacPerl', 2 if $IsMacPerl; + skip '$? unreliable in MacPerl', 2 if $IsMacOS; # We can only check if it's zero or non-zero. is( !!$results{'wait'}, !!$expect->{'wait'}, 'wait status' ); diff --git a/lib/Test/Harness/t/test-harness.t b/lib/Test/Harness/t/test-harness.t index c04e2e2cfa..e9f99c8a96 100644 --- a/lib/Test/Harness/t/test-harness.t +++ b/lib/Test/Harness/t/test-harness.t @@ -40,11 +40,11 @@ package main; use Test::More; -my $IsMacPerl = $^O eq 'MacOS'; +my $IsMacOS = $^O eq 'MacOS'; my $IsVMS = $^O eq 'VMS'; # VMS uses native, not POSIX, exit codes. -my $die_estat = $IsVMS ? 44 : 1; +my $die_estat = $IsVMS ? 44 : $IsMacOS ? 0 : 1; my %samples = ( simple => { @@ -439,7 +439,7 @@ while (my($test, $expect) = each %samples) { select STDOUT; # $? is unreliable in MacPerl, so we'll simply fudge it. - $failed->{estat} = $die_estat if $IsMacPerl and $failed; + $failed->{estat} = $die_estat if $IsMacOS and $failed; SKIP: { skip "special tests for bailout", 1 unless $test eq 'bailout'; |