Integrate change #11388 from macperl (the *.t parts needed hand massage).
authorJarkko Hietaniemi <jhi@iki.fi>
Sat, 21 Jul 2001 23:02:30 +0000 (23:02 +0000)
committerJarkko Hietaniemi <jhi@iki.fi>
Sat, 21 Jul 2001 23:02:30 +0000 (23:02 +0000)
p4raw-link: @11388 on //depot/maint-5.6/macperl: fa1e76071cf9cd14bdc552967af2da831117260a

p4raw-id: //depot/perl@11432
p4raw-branched: from //depot/maint-5.6/macperl@11423 'branch in'
macos/MacPerlTests.cmd (@11243..)
p4raw-branched: from //depot/maint-5.6/macperl@11388 'branch in'
macos/xsubpp.patch (@11243..)

ext/DB_File/t/db-btree.t
ext/DB_File/t/db-hash.t
ext/DB_File/t/db-recno.t
ext/NDBM_File/ndbm.t
ext/POSIX/POSIX.t
macos/MacPerlTests.cmd [new file with mode: 0644]
macos/xsubpp.patch [new file with mode: 0644]

index 4b4a796..2374810 100755 (executable)
@@ -142,7 +142,8 @@ ok(19, $X = tie(%h, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $DB_BTREE )) ;
 
 my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
    $blksize,$blocks) = stat($Dfile);
-ok(20, ($mode & 0777) == ($^O eq 'os2' ? 0666 : 0640) || $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'NetWare');
+ok(20, ($mode & 0777) == (($^O eq 'os2' || $^O eq 'MacOS') ? 0666 : 0640)
+   || $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'NetWare');
 
 my ($key, $value, $i);
 while (($key,$value) = each(%h)) {
index 6f2ef37..1dbb21d 100755 (executable)
@@ -108,7 +108,8 @@ ok(15, $X = tie(%h, 'DB_File',$Dfile, O_RDWR|O_CREAT, 0640, $DB_HASH ) );
 
 my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
    $blksize,$blocks) = stat($Dfile);
-ok(16, ($mode & 0777) == ($^O eq 'os2' ? 0666 : 0640) || $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'NetWare');
+ok(16, ($mode & 0777) == (($^O eq 'os2' || $^O eq 'MacOS') ? 0666 : 0640) ||
+   $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'NetWare');
 
 my ($key, $value, $i);
 while (($key,$value) = each(%h)) {
index 6dd913c..13c6355 100755 (executable)
@@ -152,7 +152,7 @@ my $X  ;
 my @h ;
 ok(17, $X = tie @h, 'DB_File', $Dfile, O_RDWR|O_CREAT, 0640, $DB_RECNO ) ;
 
-ok(18, ((stat($Dfile))[2] & 0777) == ($^O eq 'os2' ? 0666 : 0640)
+ok(18, ((stat($Dfile))[2] & 0777) == (($^O eq 'os2' || $^O eq 'MacOS') ? 0666 : 0640)
        ||  $^O eq 'MSWin32' ||  $^O eq 'NetWare' || $^O eq 'amigaos') ;
 
 #my $l = @h ;
index cb975e0..f560343 100755 (executable)
@@ -40,7 +40,7 @@ my $Dfile = "Op.dbmx.pag";
 if (! -e $Dfile) {
        ($Dfile) = <Op.dbmx*>;
 }
-if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare') {
+if ($^O eq 'amigaos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'MacOS') {
     print "ok 2 # Skipped: different file permission semantics\n";
 }
 else {
@@ -137,7 +137,7 @@ print ($h{'foo'} eq '' ? "ok 11\n" : "not ok 11\n");
 print ($h{''} eq 'bar' ? "ok 12\n" : "not ok 12\n");
 
 untie %h;
-unlink 'Op.dbmx.dir', $Dfile;
+unlink <Op.dbmx*>, $Dfile;
 
 {
    # sub-class test
index 2c52f26..a5dc9b8 100755 (executable)
@@ -21,6 +21,7 @@ $Is_W32 = $^O eq 'MSWin32';
 $Is_NetWare = $^O eq 'NetWare';
 $Is_Dos = $^O eq 'dos';
 $Is_MPE = $^O eq 'mpeix';
+$Is_MacOS = $^O eq 'MacOS';
 
 $testfd = open("TEST", O_RDONLY, 0) and print "ok 1\n";
 read($testfd, $buffer, 9) if $testfd > 2;
@@ -52,34 +53,51 @@ else {
 $sigset = new POSIX::SigSet 1,3;
 delset $sigset 1;
 if (!ismember $sigset 1) { print "ok 6\n" }
-if (ismember $sigset 3) { print "ok 7\n" }
-$mask = new POSIX::SigSet &SIGINT;
-$action = new POSIX::SigAction 'main::SigHUP', $mask, 0;
-sigaction(&SIGHUP, $action);
-$SIG{'INT'} = 'SigINT';
-kill 'HUP', $$;
-sleep 1;
-print "ok 11\n";
-
-sub SigHUP {
-    print "ok 8\n";
-    kill 'INT', $$;
-    sleep 2;
-    print "ok 9\n";
-}
+if ( ismember $sigset 3) { print "ok 7\n" }
 
-sub SigINT {
-    print "ok 10\n";
+if ($Is_MacOS) {
+    for (8..11) {
+       print "ok $_ # skipped, no kill() support on Mac OS\n";
+    }
 }
+else {
+    $mask = new POSIX::SigSet &SIGINT;
+    $action = new POSIX::SigAction 'main::SigHUP', $mask, 0;
+    sigaction(&SIGHUP, $action);
+    $SIG{'INT'} = 'SigINT';
+    kill 'HUP', $$;
+    sleep 1;
+    print "ok 11\n";
+
+    sub SigHUP {
+       print "ok 8\n";
+       kill 'INT', $$;
+       sleep 2;
+       print "ok 9\n";
+    }
+
+    sub SigINT {
+       print "ok 10\n";
+    }
 }
 
 if ($Is_MPE) {
     print "ok 12 # skipped, _POSIX_OPEN_MAX is inaccurate on MPE\n"
 } else {
-    print &_POSIX_OPEN_MAX > $fds[1] ? "ok 12\n" : "not ok 12\n"
+    if (&_POSIX_OPEN_MAX) {
+       print &_POSIX_OPEN_MAX > $fds[1] ? "ok 12\n" : "not ok 12\n";
+    } else {
+       print "ok 12 # _POSIX_OPEN_MAX undefined ($fds[1])\n";
+    }
 }
 
-print getcwd() =~ m#[/\\]t$# ? "ok 13\n" : "not ok 13\n";
+my $pat;
+if ($Is_MacOS) {
+    $pat = qr/:t:$/;
+} else {
+    $pat = qr#/t$#;
+}
+print getcwd() =~ $pat ? "ok 13\n" : "not ok 13\n";
 
 # Check string conversion functions.
 
@@ -153,7 +171,7 @@ try_strftime(27, "Fri Mar 31 00:00:00 2000 091", 0,0,0, 31,2,100);
 
 $| = 0;
 # The following line assumes buffered output, which may be not true with EMX:
-print '@#!*$@(!@#$' unless ($^O eq 'os2' || $^O eq 'uwin' || $^O eq 'os390' ||
+print '@#!*$@(!@#$' unless ($Is_MacOS || $^O eq 'os2' || $^O eq 'uwin' || $^O eq 'os390');
                            (defined $ENV{PERLIO} &&
                             $ENV{PERLIO} eq 'unix' &&
                             $Config::Config{useperlio}));
diff --git a/macos/MacPerlTests.cmd b/macos/MacPerlTests.cmd
new file mode 100644 (file)
index 0000000..3b8854d
--- /dev/null
@@ -0,0 +1,603 @@
+# ::macos:perl -I::lib -e 'for(<:*:*.t>){open my $fh,"<$_";$t=<$fh>=~/(T)/?"-T":"  ";$s="$^X -I::lib $t $_"; print qq[echo "$s"\n$s\n]}'
+set -e MACPERL ""
+set -e PERL5LIB ""
+perl -e '`set -e MACPERL_OLD "{{MACPERL}}"` if `echo {{MACPERL}}`'
+perl -e '`set -e PERL5LIB_OLD "{{PERL5LIB}}"` if `echo {{PERL5LIB}}`'
+perl -e '`set -e MACPERL ""`'
+perl -e '`set -e PERL5LIB ""`'
+echo "# When finished, execute these lines to restore your ToolServer environment:"
+echo "perl -e '¶`set -e MACPERL  ¶"¶{¶{MACPERL_OLD¶}¶}¶"¶`  if ¶`echo ¶{¶{MACPERL_OLD¶}¶}¶`'"
+echo "perl -e '¶`set -e PERL5LIB ¶"¶{¶{PERL5LIB_OLD¶}¶}¶"¶` if ¶`echo ¶{¶{PERL5LIB_OLD¶}¶}¶`'"
+echo ""
+
+perl -e 'open F, ">::macos:MacPerlTests.out"'
+open ::macos:MacPerlTests.out
+
+echo "::macos:perl -I::lib    :base:cond.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :base:cond.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :base:if.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :base:if.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :base:lex.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :base:lex.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :base:pat.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :base:pat.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :base:rs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :base:rs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :base:term.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :base:term.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :cmd:elsif.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :cmd:elsif.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :cmd:for.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :cmd:for.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :cmd:mod.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :cmd:mod.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :cmd:subval.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :cmd:subval.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :cmd:switch.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :cmd:switch.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :cmd:while.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :cmd:while.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:bproto.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:bproto.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:cmdopt.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:cmdopt.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:colon.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:colon.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:cpp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:cpp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:decl.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:decl.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:multiline.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:multiline.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:package.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:package.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:proto.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:proto.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:redef.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:redef.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:require.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:require.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:script.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:script.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:term.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:term.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :comp:use.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :comp:use.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:argv.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:argv.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:dup.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:dup.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:fs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:fs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:inplace.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:inplace.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:iprefix.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:iprefix.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:nargv.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:nargv.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:open.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:open.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:openpid.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:openpid.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:pipe.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:pipe.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:print.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:print.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:read.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:read.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :io:tell.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :io:tell.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:abbrev.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:abbrev.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:ansicolor.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:ansicolor.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:anydbm.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:anydbm.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:attrs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:attrs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:autoloader.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:autoloader.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:b.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:b.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib -T :lib:basename.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib -T :lib:basename.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:bigfloat.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:bigfloat.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:bigfltpm.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:bigfltpm.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:bigint.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:bigint.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:bigintpm.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:bigintpm.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:cgi-esc.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:cgi-esc.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:cgi-form.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:cgi-form.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:cgi-function.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:cgi-function.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:cgi-html.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:cgi-html.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:cgi-pretty.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:cgi-pretty.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:cgi-request.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:cgi-request.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:charnames.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:charnames.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:checktree.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:checktree.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:class-struct.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:class-struct.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:complex.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:complex.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:db-btree.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:db-btree.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:db-hash.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:db-hash.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:db-recno.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:db-recno.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:dirhand.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:dirhand.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:dosglob.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:dosglob.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:dprof.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:dprof.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:dumper-ovl.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:dumper-ovl.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:dumper.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:dumper.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:english.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:english.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:env-array.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:env-array.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:env.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:env.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:errno.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:errno.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:fatal.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:fatal.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:fields.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:fields.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:filecache.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:filecache.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:filecopy.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:filecopy.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib -T :lib:filefind-taint.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib -T :lib:filefind-taint.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:filefind.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:filefind.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:filefunc.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:filefunc.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:filehand.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:filehand.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:filepath.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:filepath.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:filespec.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:filespec.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:findbin.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:findbin.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:ftmp-mktemp.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:ftmp-mktemp.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:ftmp-posix.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:ftmp-posix.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:ftmp-security.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:ftmp-security.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :lib:ftmp-tempfile.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :lib:ftmp-tempfile.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:gdbm.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:gdbm.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:getopt.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:getopt.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:glob-basic.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:glob-basic.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:glob-case.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:glob-case.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:glob-global.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:glob-global.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib -T :lib:glob-taint.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib -T :lib:glob-taint.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:gol-basic.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:gol-basic.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:gol-compat.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:gol-compat.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:gol-linkage.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:gol-linkage.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:gol-oo.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:gol-oo.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:h2ph.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:h2ph.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:hostname.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:hostname.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_const.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_const.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_dir.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_dir.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_dup.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_dup.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_linenum.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_linenum.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_multihomed.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_multihomed.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_pipe.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_pipe.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_poll.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_poll.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_sel.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_sel.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_sock.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_sock.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib -T :lib:io_taint.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib -T :lib:io_taint.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_tell.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_tell.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_udp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_udp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_unix.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_unix.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:io_xs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:io_xs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:ipc_sysv.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:ipc_sysv.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:ndbm.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:ndbm.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:odbm.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:odbm.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:opcode.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:opcode.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:open2.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:open2.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:open3.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:open3.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:ops.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:ops.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:parsewords.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:parsewords.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:peek.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:peek.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:ph.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:ph.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:posix.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:posix.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:safe1.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:safe1.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:safe2.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:safe2.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:sdbm.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:sdbm.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:searchdict.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:searchdict.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:selectsaver.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:selectsaver.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:selfloader.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:selfloader.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:socket.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:socket.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:soundex.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:soundex.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:symbol.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:symbol.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:syslfs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:syslfs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:syslog.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:syslog.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:textfill.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:textfill.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:texttabs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:texttabs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:textwrap.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:textwrap.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:thr5005.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:thr5005.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:tie-push.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:tie-push.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:tie-refhash.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:tie-refhash.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:tie-splice.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:tie-splice.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:tie-stdarray.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:tie-stdarray.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:tie-stdhandle.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:tie-stdhandle.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:tie-stdpush.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:tie-stdpush.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:tie-substrhash.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:tie-substrhash.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:timelocal.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:timelocal.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :lib:trig.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :lib:trig.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:64bitint.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:64bitint.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:anonsub.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:anonsub.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:append.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:append.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:args.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:args.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:arith.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:arith.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:array.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:array.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:assignwarn.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:assignwarn.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:attrs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:attrs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:auto.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:auto.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:avhv.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:avhv.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:bop.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:bop.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:chars.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:chars.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:chop.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:chop.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:closure.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:closure.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:cmp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:cmp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:concat.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:concat.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:cond.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:cond.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:context.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:context.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:defins.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:defins.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:delete.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:delete.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:die.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:die.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :op:die_exit.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :op:die_exit.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:do.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:do.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:each.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:each.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:eval.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:eval.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:exec.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:exec.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:exists_sub.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:exists_sub.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:exp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:exp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:fh.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:fh.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:filetest.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:filetest.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:flip.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:flip.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:fork.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:fork.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:glob.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:glob.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:goto.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:goto.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:goto_xs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:goto_xs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:grent.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:grent.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:grep.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:grep.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:groups.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:groups.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:gv.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:gv.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:hashwarn.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:hashwarn.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:inc.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:inc.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:index.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:index.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:int.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:int.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:join.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:join.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:length.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:length.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:lex_assign.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:lex_assign.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:lfs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:lfs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:list.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:list.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:local.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:local.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:lop.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:lop.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :op:magic.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :op:magic.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:method.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:method.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :op:misc.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :op:misc.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:mkdir.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:mkdir.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:my.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:my.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:my_stash.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:my_stash.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:nothr5005.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:nothr5005.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:numconvert.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:numconvert.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:oct.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:oct.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:ord.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:ord.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:pack.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:pack.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:pat.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:pat.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:pos.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:pos.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:push.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:push.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:pwent.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:pwent.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:quotemeta.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:quotemeta.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:rand.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:rand.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:range.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:range.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:read.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:read.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:readdir.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:readdir.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:recurse.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:recurse.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:ref.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:ref.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:regexp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:regexp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:regexp_noamp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:regexp_noamp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:regmesg.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:regmesg.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:repeat.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:repeat.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:reverse.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:reverse.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:runlevel.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:runlevel.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:sleep.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:sleep.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:sort.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:sort.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:splice.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:splice.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:split.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:split.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :op:sprintf.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :op:sprintf.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:stat.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:stat.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:study.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:study.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:subst.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:subst.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:subst_amp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:subst_amp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:subst_wamp.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:subst_wamp.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:substr.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:substr.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:sysio.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:sysio.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib -T :op:taint.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib -T :op:taint.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:tie.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:tie.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:tiearray.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:tiearray.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:tiehandle.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:tiehandle.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:time.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:time.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:tr.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:tr.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:undef.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:undef.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:universal.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:universal.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:unshift.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:unshift.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:utf8decode.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:utf8decode.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:vec.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:vec.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:ver.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:ver.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:wantarray.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:wantarray.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :op:write.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :op:write.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:emptycmd.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:emptycmd.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:find.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:find.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:for.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:for.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:headings.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:headings.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:include.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:include.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:included.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:included.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:lref.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:lref.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:multiline_items.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:multiline_items.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:nested_items.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:nested_items.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:nested_seqs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:nested_seqs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:oneline_cmds.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:oneline_cmds.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:pod2usage.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:pod2usage.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:poderrs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:poderrs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:podselect.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:podselect.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pod:special_seqs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pod:special_seqs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pragma:constant.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pragma:constant.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pragma:diagnostics.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pragma:diagnostics.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib -T :pragma:locale.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib -T :pragma:locale.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pragma:overload.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pragma:overload.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pragma:strict.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pragma:strict.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pragma:sub_lval.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pragma:sub_lval.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pragma:subs.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pragma:subs.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :pragma:utf8.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :pragma:utf8.t >> ::macos:MacPerlTests.out
+# echo "::macos:perl -I::lib    :pragma:warnings.t" >> ::macos:MacPerlTests.out
+# ::macos:perl -I::lib    :pragma:warnings.t >> ::macos:MacPerlTests.out
+echo "::macos:perl -I::lib    :run:runenv.t" >> ::macos:MacPerlTests.out
+::macos:perl -I::lib    :run:runenv.t >> ::macos:MacPerlTests.out
+
+::macos:perl -I::lib ::macos:MacPerlTests.plx ::macos:MacPerlTests.out >> ::macos:MacPerlTests.out
+
+echo "The following tests mostly work, but fail because of known"
+echo "IO problems.  Feel free to run them, and note the failures."
+echo "These tests are known to fail.  Run if you want to, but beware"
+echo "because crashes are possible."
+echo ""
+echo "# DB is broken in a few different ways"
+echo "::macos:perl -I::lib    :lib:db-hash.t >> ::macos:MacPerlTests.out"
+echo "::macos:perl -I::lib    :lib:db-recno.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# DOS::Glob doesn't work ... do we care?"
+echo "::macos:perl -I::lib    :lib:dosglob.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# Devel::DProf seems to work, but test needs major work :/"
+echo "::macos:perl -I::lib    :lib:dprof.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# I have no idea about these ..."
+echo "::macos:perl -I::lib    :lib:ftmp-mktemp.t >> ::macos:MacPerlTests.out"
+echo "::macos:perl -I::lib    :lib:ftmp-posix.t >> ::macos:MacPerlTests.out"
+echo "::macos:perl -I::lib    :lib:ftmp-security.t >> ::macos:MacPerlTests.out"
+echo "::macos:perl -I::lib    :lib:ftmp-tempfile.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# system() fails to return a good value"
+echo "::macos:perl -I::lib    :op:die_exit.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# I dunno here"
+echo "::macos:perl -I::lib    :op:magic.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# fails test  48 (known problem in IO redirection)"
+echo "::macos:perl -I::lib    :op:misc.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# fails tests 129, 130, 142, 161 (known problem in sfio)"
+echo "::macos:perl -I::lib    :op:sprintf.t >> ::macos:MacPerlTests.out"
+echo ""
+echo "# fails tests 319, 329 (known problem in IO redirection)"
+echo "::macos:perl -I::lib    :pragma:warnings.t >> ::macos:MacPerlTests.out"
diff --git a/macos/xsubpp.patch b/macos/xsubpp.patch
new file mode 100644 (file)
index 0000000..6cce4e2
--- /dev/null
@@ -0,0 +1,474 @@
+diff -ru :perl:lib:ExtUtils: :perl.new:lib:ExtUtils:xsubpp
+--- :perl:lib:ExtUtils:xsubpp  Mon Feb 19 17:07:32 2001
++++ :perl.new:lib:ExtUtils:xsubpp      Mon Feb 19 15:31:31 2001
+@@ -173,7 +173,13 @@
+ ($dir, $filename) = $ARGV[0] =~ m#(.*)/(.*)#
+       or ($dir, $filename) = $ARGV[0] =~ m#(.*)\\(.*)#
+       or ($dir, $filename) = $ARGV[0] =~ m#(.*[>\]])(.*)#
++      or ($dir, $filename) = $ARGV[0] =~ m#(.*):(.*)#
+       or ($dir, $filename) = ('.', $ARGV[0]);
++      
++$Is_MacOS = $^O eq 'MacOS';
++if ($Is_MacOS && $dir eq '.') {
++     $dir = ":";
++}
+ chdir($dir);
+ $pwd = cwd();
+@@ -209,9 +215,21 @@
+ foreach $typemap (@tm) {
+     die "Can't find $typemap in $pwd\n" unless -r $typemap;
+ }
+-unshift @tm, qw(../../../../lib/ExtUtils/typemap ../../../lib/ExtUtils/typemap
++if ($Is_MacOS) { my @tmp;
++    foreach (qw(:::: ::: :: :)) {
++      push @tmp, "$_:lib:ExtUtils:typemap";
++      push @tmp, "$_:macos:lib:ExtUtils:typemap";
++      push @tmp, "$_:Mac:typemap";
++      push @tmp, "$_:macos:ext:Mac:typemap";
++      push @tmp, "$_:typemap";
++    }
++    unshift @tm, @tmp, "typemap";
++} else {
++    unshift @tm, qw(../../../../lib/ExtUtils/typemap ../../../lib/ExtUtils/typemap
+                 ../../lib/ExtUtils/typemap ../../../typemap ../../typemap
+                 ../typemap typemap);
++}
++
+ foreach $typemap (@tm) {
+     next unless -e $typemap ;
+     # skip directories, binary files etc.
+@@ -364,7 +382,7 @@
+     print("#line ", $line_no[@line_no - @line -1], " \"$filename\"\n")
+       if $WantLineNumbers && !/^\s*#\s*line\b/ && !/^#if XSubPPtmp/;
+     for (;  defined($_) && !/^$BLOCK_re/o;  $_ = shift(@line)) {
+-      print "$_\n";
++      XS_process("$_\n");
+     }
+     print "$xsubpp::counter::SECTION_END_MARKER\n" if $WantLineNumbers;
+ }
+@@ -746,7 +764,85 @@
+     $lastline_no = $. ;
+  
+ }
+- 
++
++sub XS_PUSH_handler
++{
++    my($type, $value, $xpush) = @_;
++    if ($xpush) {
++      print "\tEXTEND(sp, 1);\n";
++    } 
++    print "\t++sp;\n";
++    &generate_output($type, 0, "($value)", "*sp", 1);
++    "";
++}
++
++sub XS_OUTPUT_handler
++{
++    my($type, $value, $arg) = @_;
++    
++    &generate_output($type, 0, "($value)", 0, 0, $arg);
++    "";
++}
++
++sub XS_INPUT_handler
++{
++    my($type, $var, $arg) = @_;
++    &generate_init($type, 0, $var, 0, 0, $arg, 1);
++    "";
++}
++
++
++sub XS_POP_handler
++{
++    my($type, $var, $pop) = @_;
++    &generate_init($type, 0, $var, "TOPs", 1);
++    print "\tPOPs;\n" if $pop;
++    "";
++}
++
++sub SplitArgs 
++{
++    my(@bits,@pieces,$item);
++    @bits = split /,/, $_[0];
++    while (@bits) {
++      $item .= "," if $item;
++      $item .= shift @bits;
++      if (tr/(// == tr/)// 
++       && tr/{// == tr/}// 
++       && tr/[// == tr/]// 
++       && !(tr/"// & 1) 
++       && !(tr/'// & 1)
++      ) {
++          push @pieces, $item;
++          $item = "";
++      }
++    }
++    @pieces;
++}
++
++sub XS_process 
++{
++    my($text) = @_;
++    
++    while (length($text)) {
++      if ($text =~ s/^.*\bXS_PUSH\(([^,]+),\s*(.*)\)\s*;?.*\n?//) {
++          XS_PUSH_handler($1, $2, 0);
++      } elsif ($text =~ s/^.*\bXS_XPUSH\(([^,]+),\s*(.*)\)\s*;?.*\n?//) {
++          XS_PUSH_handler($1, $2, 1);
++      } elsif ($text =~ s/^.*\bXS_OUTPUT\((.*)\)\s*;?.*\n?//) {
++          XS_OUTPUT_handler(SplitArgs($1));
++      } elsif ($text =~ s/^.*\bXS_INPUT\((.*)\)\s*;?.*\n?//) {
++          XS_INPUT_handler(SplitArgs($1));
++      } elsif ($text =~ s/^.*\bXS_POP\(([^,]+),\s*(.*)\)\s*;?.*\n?//) {
++          XS_POP_handler($1, $2, 1);
++      } elsif ($text =~ s/^.*\bXS_TOP\(([^,]+),\s*(.*)\)\s*;?.*\n?//) {
++          XS_POP_handler($1, $2, 0);
++      } elsif ($text =~ s/^(.*\n?)//) {
++          print $1;
++      }
++    }
++}
++
+ sub PopFile()
+ {
+     return 0 unless $XSStack[-1]{type} eq 'file' ;
+@@ -861,8 +957,8 @@
+         my $podstartline = $.;
+       do {
+           if (/^=cut\s*$/) {
+-              print("/* Skipped embedded POD. */\n");
+-              printf("#line %d \"$filename\"\n", $. + 1)
++              XS_process("/* Skipped embedded POD. */\n");
++              XS_process(sprintf("#line %d \"$filename\"\n", $. + 1))
+                 if $WantLineNumbers;
+               next firstmodule
+           }
+@@ -880,7 +976,7 @@
+     if ($OBJ) {
+         s/#if(?:def\s|\s+defined)\s*(\(__cplusplus\)|__cplusplus)/#if defined(__cplusplus) && !defined(PERL_OBJECT)/;
+     }
+-    print $_;
++    XS_process($_);
+ }
+ &Exit unless defined $_;
+@@ -949,6 +1045,185 @@
+     1;
+ }
++sub indent {
++     my($line) = @_;
++     my($indent) = 0;
++     
++     for (;;) {
++      if ($line =~ s/^( +)//) { $indent += length $1;         next; }
++      if ($line =~ s/^\t//)   { $indent += 8 - ($indent & 7); next; }
++      last;
++     }
++     $indent;
++}
++
++sub handle_struct 
++{   
++    # extract return type, function name and arguments
++    my($deref, $structpack) = /(\**)\s*(\S+)/;
++    my($handle) = ($^O eq "MacOS") && ($deref eq "**");
++    $deref =~ s/\*$/->/;
++    $deref =~ s/\*/\[0\]/g;
++    $deref ||= ".";
++    my($structtype) = $structpack;
++
++    # a struct definition needs at least 2 lines
++    blurt ("Error: Struct definition too short '$structpack'"), next PARAGRAPH
++      unless @line ;
++
++    ($clean_struct_name = $structpack) =~ s/^$Prefix//;
++    $Full_struct_name = "${Packid}_$clean_struct_name";
++    if ($Is_VMS) { $Full_struct_name = $SymSet->addsym($Full_struct_name); }
++
++    # Check for duplicate function definition
++    for $tmp (@XSStack) {
++      next unless defined $tmp->{functions}{$Full_struct_name};
++      Warn("Warning: duplicate struct definition '$clean_struct_name' detected");
++      last;
++    }
++
++    # print struct function header
++    print Q<<"EOF";
++#XS(XS_${Full_struct_name})
++#[[
++#    dXSARGS;
++#    dXSI32;
++#    if (items < 1 || items > 2)
++#       croak("Usage: %s(STRUCT [, VALUE])", GvNAME(CvGV(cv)));
++#    SP -= items;
++EOF
++
++    # Now do a block of some sort.
++
++    &check_cpp;
++    my($structinput, $structoutput, $structindir, $structoutdir);
++    my(@field, @fieldindir, @fieldoutdir, @input, @output);
++    $structindir = $structoutdir = line_directive();
++    $_ = "";
++    while (defined $_) {
++      $_ = shift @line while /^\s*$/;
++      my($fieldindir) = line_directive();
++      my($fieldoutdir)= $fieldindir;
++      my($indent,$fieldtype,$fieldname) = 
++              m|^(\s*)(\S.*\S)\s*\b(\w+)\s*;?\s*(?:/\*.*\*/)?$|;
++      $indent = indent $indent;
++      $fieldtype = TidyType $fieldtype;
++      my($input, $output);
++      my $var = "STRUCT$deref$fieldname";
++      $_ = shift @line;
++      while (/ALIAS|READ_ONLY|INPUT:|OUTPUT:/) {
++          if (/ALIAS\s*(.*)/) {
++              $var = $1;
++              $_ = shift @line;
++          } elsif (/READ_ONLY/) {
++              $fieldindir = line_directive();
++              $input = "$_";
++              $_ = shift @line;
++          } elsif (/INPUT/) {
++              last unless ($_ = shift @line);
++              $fieldindir = line_directive();
++              while (indent($_) > $indent && !/ALIAS|READ_ONLY|INPUT:|OUTPUT:/) {
++                  $input .= "$_\n";
++                  $_ = shift @line;
++              }
++          } else {
++              last unless ($_ = shift @line);
++              $fieldoutdir = line_directive();
++              while (indent($_) > $indent && !/ALIAS|READ_ONLY|INPUT:|OUTPUT:/) {
++                  $output .= "$_\n";
++                  $_ = shift @line;
++              }
++          }
++      }
++      if ($fieldname eq "STRUCT") {
++          $structindir = $fieldindir;
++          $structoutdir= $fieldoutdir;
++          $structtype  = $fieldtype;
++          $arg         = "ST(0)";
++          $structinput = eval "qq\a$input\a";
++          $structoutput= eval "qq\a$output\a";
++      } else {
++          if ($input =~ /READ_ONLY/) {
++              $input = "\tcroak(\"$var is read-only\");\n";
++          } elsif ($input) {
++              $arg = "ST(1)";
++              $input = eval "qq\a$input\a";
++          } else {
++              $input = "\tXS_INPUT($fieldtype, $var, ST(1));";
++          }
++          if ($output) {
++              $arg = "*sp";
++              $output = "\tPUSHs(sv_newmortal());\n" . eval "qq\a$output\a";
++          } else {
++              $output = "\tXS_PUSH($fieldtype, $var);";
++          }
++          push @field, $fieldname;
++          push @fieldindir, $fieldindir;
++          push @fieldoutdir, $fieldoutdir;
++          push @input, $input; 
++          push @output, $output;
++      }
++    }
++    print Q<<"EOF";
++#    [[
++#     $structtype STRUCT;
++EOF
++    print "\tchar STRUCT_state;\n" if $handle;
++    print "\n$structindir";
++    XS_process($structinput || "\tXS_INPUT($structtype, STRUCT, ST(0));");
++    print "\n\tSTRUCT_state = HGetState((Handle)STRUCT); HLock((Handle)STRUCT);\n" if ($handle);
++    print Q<<"EOF";
++#     if (items == 1) [[ /* Get field */
++#         switch (ix) [[
++EOF
++    for (0..$#field) {
++      print Q<<"EOF";
++#         case $_:      /* $field[$_] */
++EOF
++      print $fieldoutdir[$_];
++      XS_process($output[$_]);
++      print Q<<"EOF";
++#             break;
++EOF
++    }
++    print Q<<"EOF";
++#         ]]
++#     ]] else [[         /* Set field */
++#         switch (ix) [[
++EOF
++    for (0..$#field) {
++      print Q<<"EOF";
++#         case $_:      /* $field[$_] */
++EOF
++      print $fieldindir[$_];
++      XS_process($input[$_]);
++      print Q<<"EOF";
++#             break;
++EOF
++    }
++    print Q<<"EOF";
++#         ]]
++EOF
++    print $structoutdir;
++    XS_process($structoutput || "\tXS_OUTPUT($structtype, STRUCT, ST(0))\n");
++    print Q<<"EOF";
++#     ]]
++EOF
++    print "\tHSetState((Handle)STRUCT, STRUCT_state);\n" if $handle;
++    print Q<<"EOF";
++#    ]]
++#    XSRETURN(1);
++#]]
++#
++EOF
++    for (0..$#field) {
++      push(@InitFileCode, Q<<"EOF");
++#        cv = newXS(\"${structpack}::$field[$_]\", XS_$Full_struct_name, file);
++#        XSANY.any_i32 = $_ ; 
++EOF
++    }
++}
++
+ PARAGRAPH:
+ while (fetch_para()) {
+     # Print initial preprocessor statements and blank lines
+@@ -1040,7 +1315,11 @@
+         next PARAGRAPH ;
+     }
+-
++    if (s/^STRUCT\s*//) {
++      handle_struct();
++      next PARAGRAPH;
++    }
++    
+     # extract return type, function name and arguments
+     ($ret_type) = TidyType($_);
+     $RETVAL_no_return = 1 if $ret_type =~ s/^NO_OUTPUT\s+//;
+@@ -1285,7 +1564,7 @@
+                   $processing_arg_with_types = 1;
+                   INPUT_handler() ;
+               }
+-              print $deferred;
++              XS_process($deferred);
+         process_keyword("INIT|ALIAS|ATTRS|PROTOTYPE|INTERFACE_MACRO|INTERFACE|C_ARGS") ;
+@@ -1338,7 +1617,7 @@
+       # all OUTPUT done, so now push the return value on the stack
+       if ($gotRETVAL && $RETVAL_code) {
+-          print "\t$RETVAL_code\n";
++          XS_process("\t$RETVAL_code\n");
+       } elsif ($gotRETVAL || $wantRETVAL) {
+           my $t = $WantOptimize && $targetable{$type_kind{$ret_type}};
+           my $var = 'RETVAL';
+@@ -1574,6 +1853,14 @@
+     }
+ }
++sub line_directive
++{
++    # work out the line number
++    my $line_no = $line_no[@line_no - @line -1] ;
++ 
++    return "#line $line_no \"$filename\"\n" ;
++}
++
+ sub Warn
+ {
+     # work out the line number
+@@ -1595,12 +1882,12 @@
+ }
+ sub generate_init {
+-    local($type, $num, $var) = @_;
+-    local($arg) = "ST(" . ($num - 1) . ")";
++    local($type, $num, $var, $arg, $immed) = @_;
+     local($argoff) = $num - 1;
+     local($ntype);
+     local($tk);
++    $arg ||= "ST(" . ($num - 1) . ")";
+     $type = TidyType($type) ;
+     blurt("Error: '$type' not in typemap"), return 
+       unless defined($type_kind{$type});
+@@ -1656,17 +1943,18 @@
+     } else {
+           die "panic: do not know how to handle this branch for function pointers"
+             if $name_printed;
+-          eval qq/print "$expr;\\n"/;
++          eval qq/XS_process "$expr;\\n"/;
+           warn $@   if  $@;
+     }
+ }
+ sub generate_output {
+-    local($type, $num, $var, $do_setmagic, $do_push) = @_;
+-    local($arg) = "ST(" . ($num - ($num != 0)) . ")";
++    local($type, $num, $var, $do_setmagic, $do_push, $arg, $mortalize) = @_;
+     local($argoff) = $num - 1;
+     local($ntype);
++    $mortalize ||= $var eq 'RETVAL';
++    $arg ||= "ST(" . ($num - ($num != 0)) . ")";
+     $type = TidyType($type) ;
+     if ($type =~ /^array\(([^,]*),(.*)\)/) {
+           print "\tsv_setpvn($arg, (char *)$var, $2 * sizeof($1));\n";
+@@ -1695,30 +1983,30 @@
+               warn $@   if  $@;
+               print "\t\tSvSETMAGIC(ST(ix_$var));\n" if $do_setmagic;
+           }
+-          elsif ($var eq 'RETVAL') {
++          elsif ($mortalize) {
+               if ($expr =~ /^\t\$arg = new/) {
+                   # We expect that $arg has refcnt 1, so we need to
+                   # mortalize it.
+                   eval "print qq\a$expr\a";
+                   warn $@   if  $@;
+-                  print "\tsv_2mortal(ST($num));\n";
+-                  print "\tSvSETMAGIC(ST($num));\n" if $do_setmagic;
++                  print "\tsv_2mortal($arg);\n";
++                  print "\tSvSETMAGIC($arg);\n" if $do_setmagic;
+               }
+               elsif ($expr =~ /^\s*\$arg\s*=/) {
+                   # We expect that $arg has refcnt >=1, so we need
+                   # to mortalize it!
+                   eval "print qq\a$expr\a";
+                   warn $@   if  $@;
+-                  print "\tsv_2mortal(ST(0));\n";
+-                  print "\tSvSETMAGIC(ST(0));\n" if $do_setmagic;
++                  print "\tsv_2mortal($arg);\n";
++                  print "\tSvSETMAGIC($arg);\n" if $do_setmagic;
+               }
+               else {
+                   # Just hope that the entry would safely write it
+                   # over an already mortalized value. By
+                   # coincidence, something like $arg = &sv_undef
+                   # works too.
+-                  print "\tST(0) = sv_newmortal();\n";
+-                  eval "print qq\a$expr\a";
++                  print "\t$arg = sv_newmortal();\n";
++                  eval "XS_process qq\a$expr\a";
+                   warn $@   if  $@;
+                   # new mortals don't have set magic
+               }
+@@ -1730,8 +2018,8 @@
+               warn $@   if  $@;
+               print "\tSvSETMAGIC($arg);\n" if $do_setmagic;
+           }
+-          elsif ($arg =~ /^ST\(\d+\)$/) {
+-              eval "print qq\a$expr\a";
++          else {
++              eval "XS_process qq\a$expr\a";
+               warn $@   if  $@;
+               print "\tSvSETMAGIC($arg);\n" if $do_setmagic;
+           }