diff --git a/test/testlib/OpenSSL/Test.pm b/test/testlib/OpenSSL/Test.pm index ca2e369a2095a93c182a4e27fc9edd0033ee42b9..28c915af7b3ec83a3bc72c452ff43c7443693e8f 100644 --- a/test/testlib/OpenSSL/Test.pm +++ b/test/testlib/OpenSSL/Test.pm @@ -60,6 +60,11 @@ my $test_name = undef; # (mandatory), BIN_D, TEST_D, UTIL_D and RESULT_D. my %directories = (); +# The environment variables that gave us the contents in %directories. These +# get modified whenever we change directories, so that subprocesses can use +# the values of those environment variables as well +my @direnv = (); + # A bool saying if we shall stop all testing if the current recipe has failing # tests or not. This is set by setup() if the environment variable STOPTEST # is defined with a non-empty value. @@ -674,6 +679,13 @@ sub __env { $directories{SRCTEST} = __srctop_dir("test"); $directories{RESULTS} = $ENV{RESULT_D} || $directories{BLDTEST}; + push @direnv, "TOP" if $ENV{TOP}; + push @direnv, "SRCTOP" if $ENV{SRCTOP}; + push @direnv, "BLDTOP" if $ENV{BLDTOP}; + push @direnv, "BIN_D" if $ENV{BIN_D}; + push @direnv, "TEST_D" if $ENV{TEST_D}; + push @direnv, "RESULT_D" if $ENV{RESULT_D}; + $end_with_bailout = $ENV{STOPTEST} ? 1 : 0; }; @@ -801,6 +813,16 @@ sub __cwd { } } + # Treat each environment variable that was used to get us the values in + # %directories the same was as the paths in %directories, so any sub + # process can use their values properly as well + foreach (@direnv) { + if (!file_name_is_absolute($ENV{$_})) { + my $newpath = abs2rel(rel2abs($ENV{$_}), rel2abs($dir)); + $ENV{$_} = $newpath; + } + } + if ($debug) { print STDERR "DEBUG: __cwd(), directories and files:\n"; print STDERR " \$directories{BLDTEST} = \"$directories{BLDTEST}\"\n";