mirror of https://github.com/openssl/openssl
Configure: make disabling stuff easier and safer
Disabling one thing may mean having to disable other things as well. We already have a process to auto-disable things through cascading, but that was under-used. Making the cascading mechanism available through a function to be called to disable stuff makes it more automatic, and helps us when we forget how different disabling options affect others. Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/8812)
This commit is contained in:
parent
4650d10ff6
commit
71ef78d71f
54
Configure
54
Configure
|
@ -1003,20 +1003,30 @@ if (grep { /-rpath\b/ } ($user{LDFLAGS} ? @{$user{LDFLAGS}} : ())
|
|||
"***** any of asan, msan or ubsan\n";
|
||||
}
|
||||
|
||||
my @tocheckfor = (keys %disabled);
|
||||
while (@tocheckfor) {
|
||||
my %new_tocheckfor = ();
|
||||
my @cascade_copy = (@disable_cascades);
|
||||
while (@cascade_copy) {
|
||||
my ($test, $descendents) = (shift @cascade_copy, shift @cascade_copy);
|
||||
if (ref($test) eq "CODE" ? $test->() : defined($disabled{$test})) {
|
||||
foreach(grep { !defined($disabled{$_}) } @$descendents) {
|
||||
$new_tocheckfor{$_} = 1; $disabled{$_} = "forced";
|
||||
sub disable {
|
||||
my $disable_type = shift;
|
||||
|
||||
for (@_) {
|
||||
$disabled{$_} = $disable_type;
|
||||
}
|
||||
|
||||
my @tocheckfor = (@_ ? @_ : keys %disabled);
|
||||
while (@tocheckfor) {
|
||||
my %new_tocheckfor = ();
|
||||
my @cascade_copy = (@disable_cascades);
|
||||
while (@cascade_copy) {
|
||||
my ($test, $descendents) =
|
||||
(shift @cascade_copy, shift @cascade_copy);
|
||||
if (ref($test) eq "CODE" ? $test->() : defined($disabled{$test})) {
|
||||
foreach (grep { !defined($disabled{$_}) } @$descendents) {
|
||||
$new_tocheckfor{$_} = 1; $disabled{$_} = "cascade";
|
||||
}
|
||||
}
|
||||
}
|
||||
@tocheckfor = (keys %new_tocheckfor);
|
||||
}
|
||||
@tocheckfor = (keys %new_tocheckfor);
|
||||
}
|
||||
disable(); # First cascade run
|
||||
|
||||
our $die = sub { die @_; };
|
||||
if ($target eq "TABLE") {
|
||||
|
@ -1141,6 +1151,8 @@ $target{module_ldflags} = $target{shared_ldflag} unless defined $target{module_l
|
|||
my %conf_files = map { $_ => 1 } (@{$target{_conf_fname_int}});
|
||||
$config{conf_files} = [ sort keys %conf_files ];
|
||||
|
||||
# Using sub disable within these loops may prove fragile, so we run
|
||||
# a cascade afterwards
|
||||
foreach my $feature (@{$target{disable}}) {
|
||||
if (exists $deprecated_disablables{$feature}) {
|
||||
warn "***** config $target disables deprecated feature $feature\n";
|
||||
|
@ -1159,6 +1171,7 @@ foreach my $feature (@{$target{enable}}) {
|
|||
delete $disabled{$feature};
|
||||
}
|
||||
}
|
||||
disable(); # Run a cascade now
|
||||
|
||||
$target{CXXFLAGS}//=$target{CFLAGS} if $target{CXX};
|
||||
$target{cxxflags}//=$target{cflags} if $target{CXX};
|
||||
|
@ -1308,7 +1321,7 @@ unless ($disabled{threads}) {
|
|||
if ($auto_threads) {
|
||||
# Enabled by default, disable it forcibly if unavailable
|
||||
if ($target{thread_scheme} eq "(unknown)") {
|
||||
$disabled{threads} = "unavailable";
|
||||
disable("unavailable", 'threads');
|
||||
}
|
||||
} else {
|
||||
# The user chose to enable threads explicitly, let's see
|
||||
|
@ -1343,8 +1356,7 @@ if ($target{shared_target} eq "")
|
|||
{
|
||||
$no_shared_warn = 1
|
||||
if (!$disabled{shared} || !$disabled{"dynamic-engine"});
|
||||
$disabled{pic} = $disabled{shared} = $disabled{"dynamic-engine"} =
|
||||
$disabled{module} = "no-shared-target";
|
||||
disable('no-shared-target', 'pic');
|
||||
}
|
||||
|
||||
if ($disabled{"dynamic-engine"}) {
|
||||
|
@ -1493,7 +1505,7 @@ if (!$disabled{makedepend}) {
|
|||
# In all other cases, we look for 'makedepend', and disable the
|
||||
# capability if not found.
|
||||
$config{makedepprog} = which('makedepend');
|
||||
$disabled{makedepend} = "unavailable" unless $config{makedepprog};
|
||||
disable('unavailable', 'makedepend') unless $config{makedepprog};
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1582,9 +1594,7 @@ if ($strict_warnings)
|
|||
}
|
||||
|
||||
if (grep { $_ eq '-static' } @{$config{LDFLAGS}}) {
|
||||
$disabled{"pic"} = "forced";
|
||||
$disabled{"shared"} = "forced";
|
||||
$disabled{"threads"} = "forced";
|
||||
disable('static', 'pic', 'threads');
|
||||
}
|
||||
|
||||
foreach my $idx (qw(CFLAGS CXXFLAGS))
|
||||
|
@ -1621,15 +1631,15 @@ unless ($disabled{afalgeng}) {
|
|||
($mi2) = $mi2 =~ /(\d+)/;
|
||||
my $ver = $ma*10000 + $mi1*100 + $mi2;
|
||||
if ($ver < $minver) {
|
||||
$disabled{afalgeng} = "too-old-kernel";
|
||||
disable('too-old-kernel', 'afalgeng');
|
||||
} else {
|
||||
push @{$config{engdirs}}, "afalg";
|
||||
}
|
||||
} else {
|
||||
$disabled{afalgeng} = "cross-compiling";
|
||||
disable('cross-compiling', 'afalgeng');
|
||||
}
|
||||
} else {
|
||||
$disabled{afalgeng} = "not-linux";
|
||||
disable('not-linux', 'afalgeng');
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1647,10 +1657,10 @@ unless ($disabled{ktls}) {
|
|||
my @verstr = split(" ",`cat $usr/include/linux/version.h | grep LINUX_VERSION_CODE`);
|
||||
|
||||
if ($verstr[2] < $minver) {
|
||||
$disabled{ktls} = "too-old-kernel";
|
||||
disable('too-old-kernel', 'ktls');
|
||||
}
|
||||
} else {
|
||||
$disabled{ktls} = "not-linux";
|
||||
disable('not-linux', 'ktls');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue