[project @ 1998-08-14 11:47:29 by sof]
[ghc-hetmet.git] / glafp-utils / runstdtest / runstdtest.prl
index bdc3ebf..01ce61a 100644 (file)
 # 
 # (This is supposed to be a "prettier" replacement for runstdtest.)
 #
+#      Flags
+#      ~~~~~
+#      -accept-output  replace output files with the ones actually generated by running
+#                      the program
+#
 ($Pgm = $0) =~ s|.*/||;
 $Verbose = 0;
+$SaveStderr = 0;
+$SaveStdout = 0;
 $Status = 0;
 @PgmArgs = ();
 $PgmExitStatus = 0;
@@ -70,7 +77,11 @@ arg: while ($_ = $ARGV[0]) {
                        push(@PgmArgs, @ARGV);
                        last arg; };
 
-    /^-v$/     && do { $Verbose = 1; next arg; };
+    /^-v$/            && do { $Verbose = 1; next arg; };
+    /^-accept-output-stderr$/ && do { $SaveStderr = 1; next arg; };
+    /^-accept-output-stdout$/ && do { $SaveStdout = 1; next arg; };
+    /^-accept-output$/        && do { $SaveStdout = 1; $SaveStderr = 1; next arg; };
+
     /^-O(.*)/  && do { push(@PgmArgs, &grab_arg_arg('-O',$1)); next arg; };
     /^-i(.*)/  && do { $PgmStdinFile = &grab_arg_arg('-i',$1);
                        $Status++,
@@ -107,15 +118,17 @@ arg: while ($_ = $ARGV[0]) {
 }
 
 foreach $out_file ( @PgmStdoutFile ) {
-    $Status++ ,
-    print STDERR "$Pgm: bogus -o1 expected-output file: $out_file\n"
-       if ! -f $out_file;
+    if ( ! -f $out_file && !$SaveStdout ) {
+           print STDERR "$Pgm: warning: expected-stderr file missing: $out_file\n";
+           pop(@PgmStdoutFile);
+    }
 }
 
 foreach $out_file ( @PgmStderrFile ) {
-    $Status++,
-    print STDERR "$Pgm: bogus -o2 expected-stderr file: $out_file\n"
-       if ! -f $out_file;
+    if ( ! -f $out_file && !$SaveStderr ) {
+           print STDERR "$Pgm: warning: expected-stderr file missing: $out_file\n";
+           pop(@PgmStderrFile);
+    }
 }
 
 exit 1 if $Status;
@@ -208,7 +221,7 @@ $TimeCmd /bin/sh -c \'$ToRun $TimingMagic @PgmArgs < $PgmStdinFile 1> $TmpPrefix
 progexit=\$?
 if [ \$progexit -ne $PgmExitStatus ]; then
     echo $ToRun @PgmArgs \\< $PgmStdinFile
-    echo expected exit status $PgmExitStatus not seen \\; got \$progexit
+    echo "****" expected exit status $PgmExitStatus not seen \\; got \$progexit
     myexit=1
 else
     $PostScriptLines
@@ -221,10 +234,21 @@ else
     if [ \$hit = 'NO' ] ; then
        echo $ToRun @PgmArgs \\< $PgmStdinFile
        echo expected stdout not matched by reality
-       ${CONTEXT_DIFF} $PgmStdoutFile[0] $TmpPrefix/runtest$$.1
-       myexit=1
+       orig_file="$PgmStdoutFile[0]";
+       [ ! -f \$orig_file ] && orig_file="/dev/null"
+       ${CONTEXT_DIFF} \$orig_file $TmpPrefix/runtest$$.1
+       myexit=\$?
        diffsShown=1
     fi
+    if [ $SaveStdout = 1 ] && [ \$progexit = $PgmExitStatus ] && 
+       [ $PgmStdoutFile[0] != $DefaultStdoutFile ] && [ -s $TmpPrefix/runtest$$.1 ]; then
+       echo Saving away stdout output in $PgmStdoutFile[0] ...
+       if [ -f $PgmStdoutFile[0] ]; then
+            rm -f $PgmStdoutFile[0].bak
+            cp $PgmStdoutFile[0] $PgmStdoutFile[0].bak
+       fi;
+       cp $TmpPrefix/runtest$$.1 $PgmStdoutFile[0]
+    fi
 fi
 egrep -v '^ld\.so:.*has older revision than expected' < $TmpPrefix/runtest$$.2 > $TmpPrefix/runtest$$.2b
 mv -f $TmpPrefix/runtest$$.2b $TmpPrefix/runtest$$.2
@@ -238,10 +262,21 @@ done
 if [ \$hit = 'NO' ] ; then
     echo $ToRun @PgmArgs \\< $PgmStdinFile
     echo expected stderr not matched by reality
-    ${CONTEXT_DIFF} $PgmStderrFile[0] $TmpPrefix/runtest$$.2
-    myexit=1
+    orig_file="$PgmStderrFile[0]"
+    [ ! -f \$orig_file ] && orig_file="/dev/null"
+    ${CONTEXT_DIFF} \$orig_file $TmpPrefix/runtest$$.2
+    myexit=\$?
     diffsShown=1
 fi
+if [ $SaveStderr = 1 ] && [ \$progexit = $PgmExitStatus ] && 
+   [ $PgmStderrFile[0] != $DefaultStderrFile ] && [ -s $TmpPrefix/runtest$$.2 ]; then
+       echo Saving away stderr output in $PgmStderrFile[0] ...
+       if [ -f $PgmStderrFile[0] ]; then
+          rm -f $PgmStderrFile[0].bak
+          cp $PgmStderrFile[0] $PgmStderrFile[0].bak
+       fi;
+       cp $TmpPrefix/runtest$$.2 $PgmStderrFile[0]
+fi
 $SpixstatsLine1
 
 if [ $SpixTiming = 'yes' -a \$myexit = 0 ] ; then