On 10/8/21 8:33 PM, Andrew Dunstan wrote:
> On 10/8/21 5:14 PM, Andres Freund wrote:
>> Hi,
>>
>> On 2021-10-08 11:41:50 -0400, Andrew Dunstan wrote:
>>> On 10/1/21 6:34 PM, Andres Freund wrote:
>>>> Reference test binary using TESTDIR in 001_libpq_pipeline.pl.
>>>>
>>>> The previous approach didn't really work on windows, due to the PATH
>>>> separator
>>>> being ';' not ':'. Instead of making the PATH change more complicated,
>>>> reference the binary using the TESTDIR environment.
>>>>
>>>> Reported-By: Andres Freund <[email protected]>
>>>> Suggested-By: Andrew Dunstan <[email protected]>
>>>> Discussion:
>>>> https://postgr.es/m/[email protected]
>>>> Backpatch: 14-, where the test was introduced.
>>>>
>>> I don't think any of us were thinking very clearly about this. Of
>>> course, MSVC doesn't build executables in $TESTDIR. If we want to pick
>>> up the executable from where it's built we'll need a little help from
>>> vcregress.pl. I haven't tested it but What I have in mind is something
>>> like the attached.
>> Hm. Clearly this needs more work. But I don't really like having checks for
>> MSBUILDDIR in individual tests - we should do this somewhere more central.
>> Afaictl the windows build just installs libpq_pipeline.exe. If we make sure
>> that on !msvc builds CURDIR is on PATH and on msvc temp_install/bin/ is on
>> PATH (which it should already be), then we should be good?
>>
>> I guess the reason this didn't work for me before was that I invoked
>> install.pl from the top directory, which then didn't install
>> libpq_pipeline.exe, because of the config.pl issue I mentioned somewhere?
>
>
> The whole point of 6abc8c2596 AIUI was to have this program not
> installed (that's why for the test we need to get it from $TESTDIR where
> it's built except when we're using MSVC). That commit should probably
> have made sure the MSVC install process likewise didn't install it. So
> ISTM that relying on it being installed is going in the wrong direction.
>
>
It's been 10 days or so, so we really need to get this fixed.
Is the attached more to your taste?
cheers
andrew
--
Andrew Dunstan
EDB: https://www.enterprisedb.com
diff --git a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl
index 6721edfa71..2bb8053fda 100644
--- a/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl
+++ b/src/test/modules/libpq_pipeline/t/001_libpq_pipeline.pl
@@ -14,8 +14,7 @@ $node->init;
$node->start;
my $numrows = 700;
-my $libpq_pipeline = "$ENV{TESTDIR}/libpq_pipeline";
-
+my $libpq_pipeline = TestLib::find_built_program('libpq_pipeline');
my ($out, $err) = run_command([ $libpq_pipeline, 'tests' ]);
die "oops: $err" unless $err eq '';
my @tests = split(/\s+/, $out);
diff --git a/src/test/perl/TestLib.pm b/src/test/perl/TestLib.pm
index 06aae1760e..89e16a45c7 100644
--- a/src/test/perl/TestLib.pm
+++ b/src/test/perl/TestLib.pm
@@ -75,6 +75,7 @@ our @EXPORT = qw(
system_log
run_log
run_command
+ find_built_program
command_ok
command_fails
@@ -1000,6 +1001,41 @@ sub command_checks_all
=pod
+=item find_built_program(program_name)
+
+Find the ath to an uninstalled built program according to the build type.
+
+Arguments:
+
+=over
+
+=item C<program_name>: name (without extension) of the program to look for
+
+=back
+
+=cut
+
+sub find_built_program
+{
+ my $program = shift;
+ my $path;
+
+ if (defined $ENV{MSBUILDDIR})
+ {
+ # vcregress.pl sets MSBUILDDIR which is the root of all the build dirs
+ my $wanted = sub { $_ eq "$program.exe" && $path = $File::Find::name;};
+ File::Find::find($wanted,$ENV{MSBUILDDIR});
+ }
+ elsif (defined $ENV{TESTDIR} && -e "$ENV{TESTDIR}/$program")
+ {
+ # non-MSVC programs are built in situ in the build tree
+ $path = "$ENV{TESTDIR}/$program";
+ }
+ return $path;
+}
+
+=pod
+
=back
=cut
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index 35e8f67f01..7d46b9f0cc 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -60,6 +60,7 @@ copy("$Config/regress/regress.dll", "src/test/regress");
copy("$Config/dummy_seclabel/dummy_seclabel.dll", "src/test/regress");
$ENV{PATH} = "$topdir/$Config/libpq;$ENV{PATH}";
+$ENV{MSBUILDDIR} = "$topdir/$Config";
if ($ENV{PERL5LIB})
{