#!/usr/bin/perl use strict; use warnings; # use of SRCDIR/SUBDIR is required for supporting VPath builds my $srcdir = $ENV{'SRCDIR'} or die 'SRCDIR environment variable is not set'; my $subdir = $ENV{'SUBDIR'} or die 'SUBDIR environment variable is not set'; my $regress_in = "$srcdir/$subdir/regress.in"; my $expected_out = "$srcdir/$subdir/expected.out"; # the output file should land in the build_dir of VPath, or just in # the current dir, if VPath isn't used my $regress_out = "regress.out"; # open input file first, so possible error isn't sent to redirected STDERR open(my $regress_in_fh, "<", $regress_in) or die "can't open $regress_in for reading: $!"; # save STDOUT/ERR and redirect both to regress.out open(my $oldout_fh, ">&", \*STDOUT) or die "can't dup STDOUT: $!"; open(my $olderr_fh, ">&", \*STDERR) or die "can't dup STDERR: $!"; open(STDOUT, ">", $regress_out) or die "can't open $regress_out for writing: $!"; open(STDERR, ">&", \*STDOUT) or die "can't dup STDOUT: $!"; # read lines from regress.in and run uri-regress on them while (<$regress_in_fh>) { chomp; print "trying $_\n"; system("./uri-regress \"$_\""); print "\n"; } # restore STDOUT/ERR so we can print the outcome to the user open(STDERR, ">&", $olderr_fh) or die; # can't complain as STDERR is still duped open(STDOUT, ">&", $oldout_fh) or die "can't restore STDOUT: $!"; # just in case close $regress_in_fh; my $diff_status = system( "diff -c \"$srcdir/$subdir/expected.out\" regress.out >regress.diff"); print "=" x 70, "\n"; if ($diff_status == 0) { print "All tests passed\n"; exit 0; } else { print <