Hi Andrew,

On Sat, May 07, 2022 at 09:13:48AM +0900, Michael Paquier wrote:
> Let's do that for now then as we need a middle ground for HEAD.  I'll
> come up with something at the beginning of next week.

And here you go as of the attached to show the idea.  The CI is able
to execute and detect the default commands for lz4, gzip and zstd,
while one of my boxes without any of those commands would ignore them.
What do you think?
--
Michael
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index fc7aa8b9a3..6e06686478 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -31,12 +31,11 @@ do './src/tools/msvc/config_default.pl';
 do './src/tools/msvc/config.pl' if (-f 'src/tools/msvc/config.pl');
 
 # These values are defaults that can be overridden by the calling environment
-# (see buildenv.pl processing below).
+# (see buildenv.pl processing below).  We assume that the ones listed here
+# always exist by default.  Other values may optionally be set for bincheck or
+# taptest, see set_command_env() below.
 # c.f. src/Makefile.global.in and configure.ac
-$ENV{GZIP_PROGRAM} ||= 'gzip';
-$ENV{LZ4} ||= 'lz4';
 $ENV{TAR} ||= 'tar';
-$ENV{ZSTD} ||= 'zstd';
 
 # buildenv.pl is for specifying the build environment settings
 # it should contain lines like:
@@ -119,6 +118,41 @@ exit 0;
 
 ########################################################################
 
+# Helper function for set_command_env, to set one environment command.
+sub set_single_env
+{
+	my $envname = shift;
+	my $envdefault  = shift;
+
+	# If a command is defined by the environment, just use it.
+	return if (defined($ENV{$envname}));
+
+	# Nothing is defined, so attempt to assign a default.  The command
+	# may not be in the current environment, hence check if it can be
+	# executed.
+	my $rc = system($envdefault, '--version');
+	if ($rc != 0)
+	{
+		# Execution of the default command failed, so reset its
+		# environment value.
+		$ENV{$envname} = '';
+		return;
+	}
+
+	# Set the environment to the default as it exists.
+	$ENV{$envname} = $envdefault;
+	return;
+}
+
+# Set environment values for various command types.  These can be used
+# in the TAP tests.
+sub set_command_env
+{
+	set_single_env('GZIP_PROGRAM', 'gzip');
+	set_single_env('LZ4', 'lz4');
+	set_single_env('ZSTD', 'zstd');
+}
+
 sub installcheck_internal
 {
 	my ($schedule, @EXTRA_REGRESS_OPTS) = @_;
@@ -276,6 +310,8 @@ sub bincheck
 {
 	InstallTemp();
 
+	set_command_env();
+
 	my $mstat = 0;
 
 	# Find out all the existing TAP tests by looking for t/ directories
@@ -310,6 +346,9 @@ sub taptest
 	push(@args, "$topdir/$dir");
 
 	InstallTemp();
+
+	set_command_env();
+
 	my $status = tap_check(@args);
 	exit $status if $status;
 	return;

Attachment: signature.asc
Description: PGP signature

Reply via email to