From: Jarkko Hietaniemi Date: Wed, 26 Jun 2002 15:41:48 +0000 (+0000) Subject: Integrate from macperl: X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=943b127a89808d65bbe1eec642a5fa38039659ae;p=p5sagit%2Fp5-mst-13.2.git Integrate from macperl: [ 17345] Mac OS Test updates [ 17347] Support hints and OPTIMIZE in MM_MacOS [ 17348] Crank down optimization for Mac OS in Digest::MD5 p4raw-link: @17348 on //depot/macperl: 5e6109b944d42c12b5bf2560bc7d5e1e26b50cb5 p4raw-link: @17347 on //depot/macperl: 4fa8a8856377f81f41ceaba369f758c11cc6b898 p4raw-link: @17345 on //depot/macperl: ef506d9df705afe007449cf4101370864d7e1d79 p4raw-id: //depot/perl@17363 p4raw-branched: from //depot/macperl@17362 'branch in' ext/Digest/MD5/hints/MacOS.pl p4raw-integrated: from //depot/macperl@17362 'copy in' ext/POSIX/t/taint.t lib/ExtUtils/MM_MacOS.pm lib/Test/Harness/t/strap-analyze.t lib/Test/Harness/t/test-harness.t (@17344..) --- diff --git a/ext/Digest/MD5/hints/MacOS.pl b/ext/Digest/MD5/hints/MacOS.pl new file mode 100644 index 0000000..3741e83 --- /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 fcc52c2..b20441f 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 cbef99b..576d744 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 06c0966..02fa1d6 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 c04e2e2..e9f99c8 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';