blob: 3cf331bfe5cf9bade6cce4ec5ee96a4b27a7a96c [file] [log] [blame]
# -*-perl-*- hey - emacs - this is a perl file
# src/tools/msvc/vcregress.pl
use strict;
our $config;
use Cwd;
use File::Copy;
my $startdir = getcwd();
chdir "../../.." if (-d "../../../src/tools/msvc");
require 'src/tools/msvc/config_default.pl';
require 'src/tools/msvc/config.pl' if (-f 'src/tools/msvc/config.pl');
# buildenv.pl is for specifying the build environment settings
# it should contian lines like:
# $ENV{PATH} = "c:/path/to/bison/bin;$ENV{PATH}";
if ( -e "src/tools/msvc/buildenv.pl")
{
require "src/tools/msvc/buildenv.pl";
}
my $what = shift || "";
if ($what =~ /^(check|installcheck|plcheck|contribcheck|ecpgcheck)$/i)
{
$what = uc $what;
}
else
{
usage();
}
# use a capital C here because config.pl has $config
my $Config = -e "release/postgres/postgres.exe" ? "Release" : "Debug";
copy("$Config/refint/refint.dll","src/test/regress");
copy("$Config/autoinc/autoinc.dll","src/test/regress");
copy("$Config/regress/regress.dll","src/test/regress");
$ENV{PATH} = "../../../$Config/libpq;../../$Config/libpq;$ENV{PATH}";
my $schedule = shift;
unless ($schedule)
{
$schedule = "serial";
$schedule = "parallel" if ($what eq 'CHECK' || $what =~ /PARALLEL/);
}
my $topdir = getcwd();
$ENV{PERL5LIB} = "$topdir/src/tools/msvc";
my $maxconn = "";
$maxconn = "--max_connections=$ENV{MAX_CONNECTIONS}"
if $ENV{MAX_CONNECTIONS};
my $temp_config = "";
$temp_config = "--temp-config=\"$ENV{TEMP_CONFIG}\""
if $ENV{TEMP_CONFIG};
chdir "src/test/regress";
my %command = (
CHECK => \&check,
PLCHECK => \&plcheck,
INSTALLCHECK => \&installcheck,
ECPGCHECK => \&ecpgcheck,
CONTRIBCHECK => \&contribcheck
);
my $proc = $command{$what};
exit 3 unless $proc;
&$proc();
exit 0;
########################################################################
sub installcheck
{
my @args = (
"../../../$Config/pg_regress/pg_regress",
"--dlpath=.",
"--psqldir=../../../$Config/psql",
"--schedule=${schedule}_schedule",
"--multibyte=SQL_ASCII",
"--load-language=plpgsql",
"--no-locale"
);
push(@args,$maxconn) if $maxconn;
system(@args);
my $status = $? >>8;
exit $status if $status;
}
sub check
{
my @args = (
"../../../$Config/pg_regress/pg_regress",
"--dlpath=.",
"--psqldir=../../../$Config/psql",
"--schedule=${schedule}_schedule",
"--multibyte=SQL_ASCII",
"--load-language=plpgsql",
"--no-locale",
"--temp-install=./tmp_check",
"--top-builddir=\"$topdir\""
);
push(@args,$maxconn) if $maxconn;
push(@args,$temp_config) if $temp_config;
system(@args);
my $status = $? >>8;
exit $status if $status;
}
sub ecpgcheck
{
chdir $startdir;
system("msbuild ecpg_regression.proj /p:config=$Config");
my $status = $? >>8;
exit $status if $status;
chdir "$topdir/src/interfaces/ecpg/test";
$schedule="ecpg";
my @args = (
"../../../../$Config/pg_regress_ecpg/pg_regress_ecpg",
"--psqldir=../../../$Config/psql",
"--dbname=regress1,connectdb",
"--create-role=connectuser,connectdb",
"--schedule=${schedule}_schedule",
"--multibyte=SQL_ASCII",
"--load-language=plpgsql",
"--no-locale",
"--temp-install=./tmp_chk",
"--top-builddir=\"$topdir\""
);
push(@args,$maxconn) if $maxconn;
system(@args);
$status = $? >>8;
exit $status if $status;
}
sub plcheck
{
chdir "../../pl";
foreach my $pl (glob("*"))
{
next unless -d "$pl/sql" && -d "$pl/expected";
my $lang = $pl eq 'tcl' ? 'pltcl' : $pl;
next unless -d "../../$Config/$lang";
$lang = 'plpythonu' if $lang eq 'plpython';
chdir $pl;
print "============================================================\n";
print "Checking $lang\n";
my @tests = fetchTests();
my @args = (
"../../../$Config/pg_regress/pg_regress",
"--psqldir=../../../$Config/psql",
"--dbname=pl_regression","--load-language=$lang",@tests
);
system(@args);
my $status = $? >> 8;
exit $status if $status;
chdir "..";
}
chdir "../../..";
}
sub contribcheck
{
chdir "../../../contrib";
my $mstat = 0;
foreach my $module (glob("*"))
{
next unless -d "$module/sql" &&
-d "$module/expected" &&
(-f "$module/Makefile" || -f "$module/GNUmakefile");
chdir $module;
print "============================================================\n";
print "Checking $module\n";
my @tests = fetchTests();
my @args = (
"../../$Config/pg_regress/pg_regress",
"--psqldir=../../$Config/psql",
"--dbname=contrib_regression",@tests
);
system(@args);
my $status = $? >> 8;
$mstat ||= $status;
chdir "..";
}
exit $mstat if $mstat;
}
sub fetchTests
{
my $handle;
open($handle,"<Makefile")
|| open($handle,"<GNUmakefile")
|| die "Could not open Makefile";
local($/) = undef;
my $m = <$handle>;
close($handle);
my $t = "";
$m =~ s/\\[\r\n]*//gs;
if ($m =~ /^REGRESS\s*=\s*(.*)$/gm)
{
$t = $1;
$t =~ s/\s+/ /g;
if ($m =~ /contrib\/pgcrypto/)
{
# pgcrypto is special since the tests depend on the
# configuration of the build
my $cftests =
$config->{openssl}
?GetTests("OSSL_TESTS",$m)
: GetTests("INT_TESTS",$m);
my $pgptests =
$config->{zlib}
?GetTests("ZLIB_TST",$m)
: GetTests("ZLIB_OFF_TST",$m);
$t =~ s/\$\(CF_TESTS\)/$cftests/;
$t =~ s/\$\(CF_PGP_TESTS\)/$pgptests/;
}
}
return split(/\s+/,$t);
}
sub GetTests
{
my $testname = shift;
my $m = shift;
if ($m =~ /^$testname\s*=\s*(.*)$/gm)
{
return $1;
}
return "";
}
sub usage
{
print STDERR
"Usage: vcregress.pl ",
"<check|installcheck|plcheck|contribcheck|ecpgcheck> [schedule]\n" ;
exit(1);
}