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})
 {

Reply via email to