Integrate from macperl:
Jarkko Hietaniemi [Wed, 26 Jun 2002 15:41:48 +0000 (15:41 +0000)]
[ 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..)

ext/Digest/MD5/hints/MacOS.pl [new file with mode: 0644]
ext/POSIX/t/taint.t
lib/ExtUtils/MM_MacOS.pm
lib/Test/Harness/t/strap-analyze.t
lib/Test/Harness/t/test-harness.t

diff --git a/ext/Digest/MD5/hints/MacOS.pl b/ext/Digest/MD5/hints/MacOS.pl
new file mode 100644 (file)
index 0000000..3741e83
--- /dev/null
@@ -0,0 +1,3 @@
+# MWCPPC compiler needs to crank down the optimizations
+
+$self->{MWCPPCOptimize} = "-O1";
index fcc52c2..b20441f 100644 (file)
@@ -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;
index cbef99b..576d744 100644 (file)
@@ -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__
index 06c0966..02fa1d6 100644 (file)
@@ -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' );
index c04e2e2..e9f99c8 100644 (file)
@@ -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';