diff --git a/src/tools/msvc/build.pl b/src/tools/msvc/build.pl new file mode 100644 index 0000000000..534492b9eb --- /dev/null +++ b/src/tools/msvc/build.pl @@ -0,0 +1,67 @@ + +# -*-perl-*- hey - emacs - this is a perl file + +# $PostgreSQL: pgsql/src/tools/msvc/build.pl,v 1.1 2007/09/23 21:52:56 adunstan Exp $ + +BEGIN +{ + + chdir("../../..") if (-d "../msvc" && -d "../../../src"); + +} + +use lib "src/tools/msvc"; + +use Cwd; + +use Mkvcbuild; + +# buildenv.pl is for specifying the build environment settings +# it should contain lines like: +# $ENV{PATH} = "c:/path/to/bison/bin;$ENV{PATH}"; + +if ( -e "src/tools/msvc/buildenv.pl") +{ + require "src/tools/msvc/buildenv.pl"; +} +elsif (-e "./buildenv.pl" ) +{ + require "./buildenv.pl"; +} + + +# set up the project +our $config; +require "config.pl"; + +Mkvcbuild::mkvcbuild($config); + +# check what sort of build we are doing + +my $bconf = $ENV{CONFIG} || "Release"; +my $buildwhat = $ARGV[1] || ""; +if ($ARGV[0] eq 'DEBUG') +{ + $bconf = "Debug"; +} +elsif ($ARGV[0] ne "RELEASE") +{ + $buildwhat = $ARGV[0] || ""; +} + +# ... and do it + +if ($buildwhat) +{ + system("vcbuild $buildwhat.vcproj $bconf"); +} +else +{ + system("msbuild pgsql.sln /verbosity:detailed /p:Configuration=$bconf"); +} + +# report status + +$status = $? >> 8; + +exit $status; diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl new file mode 100644 index 0000000000..1ab0973215 --- /dev/null +++ b/src/tools/msvc/vcregress.pl @@ -0,0 +1,266 @@ + +# -*-perl-*- hey - emacs - this is a perl file + +# $PostgreSQL: pgsql/src/tools/msvc/vcregress.pl,v 1.1 2007/09/23 21:52:56 adunstan Exp $ + +use strict; + +our $config; + +use Cwd; +use File::Copy; + +my $startdir = getcwd(); + +chdir "../../.." if (-d "../../../src/tools/msvc"); + +# 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/defint.dll","contrib/spi"); +copy("$Config/autoinc/autoinc.dll","contrib/spi"); +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 $temp_port; +if (-e "src/tools/msvc/config.pl") +{ + eval{ + require "src/tools/msvc/config.pl"; + $temp_port = $config->{'--with-pgport'}; + } +} +$temp_port ||= 55432; + +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", + "--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", + "--psqldir=../../../$Config/psql", + "--schedule=${schedule}_schedule", + "--multibyte=SQL_ASCII", + "--load-language=plpgsql", + "--no-locale", + "--temp-install=./tmp_check", + "--top-builddir=\"$topdir\"", + "--temp-port=$temp_port" + ); + 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", + "--createrole=connectuser,connectdb", + "--schedule=${schedule}_schedule", + "--multibyte=SQL_ASCII", + "--load-language=plpgsql", + "--no-locale", + "--temp-install=./tmp_chk", + "--top-builddir=\"$topdir\"", + "--temp-port=$temp_port" + ); + 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 "Makefile"; + 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,"; + 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 ", + " [schedule]\n" ; + exit(1); +}