summaryrefslogtreecommitdiffstats
path: root/Configure
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2017-11-29 13:09:01 +0100
committerRichard Levitte <levitte@openssl.org>2017-12-08 00:36:21 +0100
commit7ecdf18d80cba14ad1afa6c0d18574d2ad2929c3 (patch)
treeec3fa0488234e02321307888ecff4359238e7bc2 /Configure
parente84282cbdafe0b4e49742106974ff8ee28087875 (diff)
Save away the environment variables we rely on
There are cases when we overwrite %ENV values, and while this is perfectly fine on some platforms, it isn't on others, because the Configure script isn't necessarely run in a separate process, and thus, changing %ENV may very well change the environment of the calling shell. VMS is such a platform. Furthermore, saving away values that we use also allow us to save them in configdata.pm in an effective way, and recall those values just as effectively when reconfiguring. Also, this makes sure that we do use the saved away values when reconfiguring, when the actual environment variables might otherwise affect us. Reviewed-by: Andy Polyakov <appro@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4818)
Diffstat (limited to 'Configure')
-rwxr-xr-xConfigure72
1 files changed, 42 insertions, 30 deletions
diff --git a/Configure b/Configure
index 0bdc110d69..6f2aee38ca 100755
--- a/Configure
+++ b/Configure
@@ -223,25 +223,12 @@ if (grep /^reconf(igure)?$/, @argvcopy) {
@{$configdata::config{perlargv}} : ();
die "Incorrect data to reconfigure, please do a normal configuration\n"
if (grep(/^reconf/,@argvcopy));
- $ENV{CROSS_COMPILE} = $configdata::config{cross_compile_prefix}
- if defined($configdata::config{cross_compile_prefix});
- $ENV{CC} = $configdata::config{cc}
- if defined($configdata::config{cc});
- $ENV{CXX} = $configdata::config{cxx}
- if defined($configdata::config{cxx});
- $ENV{BUILDFILE} = $configdata::config{build_file}
- if defined($configdata::config{build_file});
- $ENV{$local_config_envname} = $configdata::config{local_config_dir}
- if defined($configdata::config{local_config_dir});
+ $config{perlenv} = $configdata::config{perlenv} // {};
print "Reconfiguring with: ", join(" ",@argvcopy), "\n";
- print " CROSS_COMPILE = ",$ENV{CROSS_COMPILE},"\n"
- if $ENV{CROSS_COMPILE};
- print " CC = ",$ENV{CC},"\n" if $ENV{CC};
- print " CXX = ",$ENV{CXX},"\n" if $ENV{CXX};
- print " BUILDFILE = ",$ENV{BUILDFILE},"\n" if $ENV{BUILDFILE};
- print " $local_config_envname = ",$ENV{$local_config_envname},"\n"
- if $ENV{$local_config_envname};
+ foreach (sort keys %{$config{perlenv}}) {
+ print " $_ = $config{perlenv}->{$_}\n";
+ }
} else {
die "Insufficient data to reconfigure, please do a normal configuration\n";
}
@@ -280,13 +267,13 @@ foreach (sort glob($pattern)) {
&read_config($_);
}
-if (defined $ENV{$local_config_envname}) {
+if (defined env($local_config_envname)) {
if ($^O eq 'VMS') {
# VMS environment variables are logical names,
# which can be used as is
$pattern = $local_config_envname . ':' . '*.conf';
} else {
- $pattern = catfile($ENV{$local_config_envname}, '*.conf');
+ $pattern = catfile(env($local_config_envname), '*.conf');
}
foreach (sort glob($pattern)) {
@@ -982,7 +969,7 @@ $target{dso_extension}=$target{shared_extension_simple};
if ($config{target} =~ /^(?:Cygwin|mingw)/);
-$config{cross_compile_prefix} = $ENV{'CROSS_COMPILE'}
+$config{cross_compile_prefix} = env('CROSS_COMPILE')
if $config{cross_compile_prefix} eq "";
# Allow overriding the names of some tools. USE WITH CARE
@@ -990,19 +977,19 @@ $config{cross_compile_prefix} = $ENV{'CROSS_COMPILE'}
# the default string.
$config{perl} = ($^O ne "VMS" ? $^X : "perl");
$config{hashbangperl} =
- $ENV{'HASHBANGPERL'} || $ENV{'PERL'} || "/usr/bin/env perl";
-$target{cc} = $ENV{'CC'} || $target{cc} || "cc";
-$target{cxx} = $ENV{'CXX'} || $target{cxx} || "c++";
-$target{ranlib} = $ENV{'RANLIB'} || $target{ranlib} ||
+ env('HASHBANGPERL') || env('PERL') || "/usr/bin/env perl";
+$target{cc} = env('CC') || $target{cc} || "cc";
+$target{cxx} = env('CXX') || $target{cxx} || "c++";
+$target{ranlib} = env('RANLIB') || $target{ranlib} ||
(which("$config{cross_compile_prefix}ranlib") ?
"\$(CROSS_COMPILE)ranlib" : "true");
-$target{ar} = $ENV{'AR'} || $target{ar} || "ar";
-$target{nm} = $ENV{'NM'} || $target{nm} || "nm";
+$target{ar} = env('AR') || $target{ar} || "ar";
+$target{nm} = env('NM') || $target{nm} || "nm";
$target{rc} =
- $ENV{'RC'} || $ENV{'WINDRES'} || $target{rc} || "windres";
+ env('RC') || env('WINDRES') || $target{rc} || "windres";
# Allow overriding the build file name
-$target{build_file} = $ENV{BUILDFILE} || $target{build_file} || "Makefile";
+$target{build_file} = env('BUILDFILE') || $target{build_file} || "Makefile";
# Cache information necessary for reconfiguration
$config{cc} = $target{cc};
@@ -1418,7 +1405,7 @@ if ($builder eq "unified") {
my @build_file_templates = ();
# First, look in the user provided directory, if given
- if (defined $ENV{$local_config_envname}) {
+ if (defined env($local_config_envname)) {
@build_file_templates =
map {
if ($^O eq 'VMS') {
@@ -1426,7 +1413,7 @@ if ($builder eq "unified") {
# which can be used as is
$local_config_envname . ':' . $_;
} else {
- catfile($ENV{$local_config_envname}, $_);
+ catfile(env($local_config_envname), $_);
}
}
@build_file_template_names;
@@ -2009,6 +1996,22 @@ foreach (sort keys %config) {
print OUT " ", $_, " => [ ", join(", ",
map { quotify("perl", $_) }
@{$config{$_}}), " ],\n";
+ } elsif (ref($config{$_}) eq "HASH") {
+ print OUT " ", $_, " => {";
+ if (scalar keys %{$config{$_}} > 0) {
+ print OUT "\n";
+ foreach my $key (sort keys %{$config{$_}}) {
+ print OUT " ",
+ join(" => ",
+ quotify("perl", $key),
+ defined $config{$_}->{$key}
+ ? quotify("perl", $config{$_}->{$key})
+ : "undef");
+ print OUT ",\n";
+ }
+ print OUT " ";
+ }
+ print OUT "},\n";
} else {
print OUT " ", $_, " => ", quotify("perl", $config{$_}), ",\n"
}
@@ -2522,6 +2525,15 @@ sub which
}
}
+sub env
+{
+ my $name = shift;
+
+ return $config{perlenv}->{$name} if exists $config{perlenv}->{$name};
+ $config{perlenv}->{$name} = $ENV{$name};
+ return $config{perlenv}->{$name};
+}
+
# Configuration printer ##############################################
sub print_table_entry