diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 84114205bb5..1723a5644ec 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -33,7 +33,7 @@ if (-e "src/tools/msvc/buildenv.pl") my $what = shift || ""; if ($what =~ -/^(check|installcheck|plcheck|contribcheck|ecpgcheck|isolationcheck|upgradecheck|tapcheck)$/i +/^(check|installcheck|plcheck|contribcheck|ecpgcheck|isolationcheck|upgradecheck|bincheck)$/i ) { $what = uc $what; @@ -60,7 +60,14 @@ unless ($schedule) $schedule = "parallel" if ($what eq 'CHECK' || $what =~ /PARALLEL/); } -$ENV{PERL5LIB} = "$topdir/src/tools/msvc;$ENV{PERL5LIB}"; +if ($ENV{PERL5LIB}) +{ + $ENV{PERL5LIB} = "$topdir/src/tools/msvc;$ENV{PERL5LIB}"; +} +else +{ + $ENV{PERL5LIB} = "$topdir/src/tools/msvc"; +} my $maxconn = ""; $maxconn = "--max_connections=$ENV{MAX_CONNECTIONS}" @@ -79,7 +86,7 @@ my %command = ( ECPGCHECK => \&ecpgcheck, CONTRIBCHECK => \&contribcheck, ISOLATIONCHECK => \&isolationcheck, - TAPCHECK => \&tapcheck, + BINCHECK => \&bincheck, UPGRADECHECK => \&upgradecheck,); my $proc = $command{$what}; @@ -165,39 +172,43 @@ sub isolationcheck exit $status if $status; } -sub tapcheck +sub tap_check { - my @args = ( "prove", "--verbose", "t/*.pl"); - my $mstat = 0; + die "Tap tests not enabled in configuration" + unless $config->{tap_tests}; + my $dir = shift; + chdir $dir; + + my @args = ( "prove", "--verbose", "t/*.pl"); + + # adjust the environment for just this test + local %ENV = %ENV; $ENV{PERL5LIB} = "$topdir/src/test/perl;$ENV{PERL5LIB}"; $ENV{PG_REGRESS} = "$topdir/$Config/pg_regress/pg_regress"; + $ENV{TESTDIR} = "$dir"; + + system(@args); + my $status = $? >> 8; + return $status; +} + +sub bincheck +{ + InstallTemp(); + + my $mstat = 0; + # Find out all the existing TAP tests by looking for t/ directories # in the tree. - my $tap_dirs = []; - my @top_dir = ($topdir); - File::Find::find( - { wanted => sub { - /^t\z/s - && push(@$tap_dirs, $File::Find::name); - } - }, - @top_dir); + my @bin_dirs = glob("$topdir/src/bin/*"); # Process each test - foreach my $test_path (@$tap_dirs) + foreach my $dir (@$bin_dirs) { - my $dir = dirname($test_path); - my $tmp_root = "$dir/tmp_check"; - (mkdir $tmp_root || die $!) unless -d $tmp_root; - my $tmp_install = "$tmp_root/install"; - Install($tmp_install, "all", $config); - chdir $dir; - # Reset those values, they may have been changed by another test. - $ENV{TESTDIR} = "$dir"; - system(@args); - my $status = $? >> 8; + next unless -d "$dir/t"; + my $status = tap_check($dir); $mstat ||= $status; } exit $mstat if $mstat;