From a184e4db83c80d28103774ced984c7790fbd44ba Mon Sep 17 00:00:00 2001 From: Alvaro Herrera Date: Fri, 6 Jul 2012 15:38:11 -0400 Subject: [PATCH] Convert libpq regress script to Perl This should ease its use on the Windows build environment. --- src/interfaces/libpq/test/Makefile | 2 +- src/interfaces/libpq/test/regress.pl | 62 ++++++++++++++++++++++++++++ src/interfaces/libpq/test/regress.sh | 21 ---------- 3 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 src/interfaces/libpq/test/regress.pl delete mode 100644 src/interfaces/libpq/test/regress.sh diff --git a/src/interfaces/libpq/test/Makefile b/src/interfaces/libpq/test/Makefile index b9023c37f3..ab41dc33a6 100644 --- a/src/interfaces/libpq/test/Makefile +++ b/src/interfaces/libpq/test/Makefile @@ -15,7 +15,7 @@ all: $(PROGS) installcheck: all SRCDIR='$(top_srcdir)' SUBDIR='$(subdir)' \ - $(SHELL) $(top_srcdir)/$(subdir)/regress.sh + $(PERL) $(top_srcdir)/$(subdir)/regress.pl clean distclean maintainer-clean: rm -f $(PROGS) diff --git a/src/interfaces/libpq/test/regress.pl b/src/interfaces/libpq/test/regress.pl new file mode 100644 index 0000000000..f2fee620da --- /dev/null +++ b/src/interfaces/libpq/test/regress.pl @@ -0,0 +1,62 @@ +#!/usr/bin/perl -w + +use strict; + +# 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(REGRESS_IN, "<", $regress_in) + or die "can't open $regress_in for reading: $!"; + +# save STDOUT/ERR and redirect both to regress.out +open(OLDOUT, ">&", \*STDOUT) or die "can't dup STDOUT: $!"; +open(OLDERR, ">&", \*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 () + { + chomp; + print "trying $_\n"; + system("./uri-regress \"$_\""); + print "\n"; +} + +# restore STDOUT/ERR so we can print the outcome to the user +open(STDERR, ">&", \*OLDERR) or die; # can't complain as STDERR is still duped +open(STDOUT, ">&", \*OLDOUT) or die "Can't restore STDOUT: $!"; + +# just in case +close REGRESS_IN; + +my $diff_status = system( + "diff -c \"$srcdir/$subdir/expected.out\" regress.out >regress.diff"); +if ($diff_status == 0) + { + print "=" x 70, "\n"; + print "All tests passed\n"; + exit 0; +} +else + { + print "=" x 70, "\n"; + print <regress.out 2>&1 - -if diff -c "${SRCDIR}/${SUBDIR}/"expected.out regress.out >regress.diff; then - echo "========================================" - echo "All tests passed" - exit 0 -else - echo "========================================" - echo "FAILED: the test result differs from the expected output" - echo - echo "Review the difference in ${SUBDIR}/regress.diff" - echo "========================================" - exit 1 -fi -- 2.40.0