Configure: give config targets the possibility to enable or disable features

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3745)
This commit is contained in:
Richard Levitte 2017-06-22 00:47:49 +02:00
parent 410e8c9356
commit 906eb3d031
3 changed files with 49 additions and 19 deletions

View File

@ -42,6 +42,10 @@
BASE_common => { BASE_common => {
template => 1, template => 1,
enable => [],
disable => [],
defines => defines =>
sub { sub {
my @defs = (); my @defs = ();

View File

@ -34,6 +34,13 @@ In each table entry, the following keys are significant:
sys_id => System identity for systems where that sys_id => System identity for systems where that
is difficult to determine automatically. is difficult to determine automatically.
enable => Enable specific configuration features.
This MUST be an array of words.
disable => Disable specific configuration features.
This MUST be an array of words.
Note: if the same feature is both enabled
and disabled, disable wins.
cc => The C compiler command, usually one of "cc", cc => The C compiler command, usually one of "cc",
"gcc" or "clang". This command is normally "gcc" or "clang". This command is normally
also used to link object files and also used to link object files and

View File

@ -857,6 +857,44 @@ if ($target =~ m/^CygWin32(-.*)$/) {
$target = "Cygwin".$1; $target = "Cygwin".$1;
} }
# Support for legacy targets having a name starting with 'debug-'
my ($d, $t) = $target =~ m/^(debug-)?(.*)$/;
if ($d) {
$config{build_type} = "debug";
# If we do not find debug-foo in the table, the target is set to foo.
if (!$table{$target}) {
$target = $t;
}
}
$config{target} = $target;
my %target = resolve_config($target);
&usage if (!%target || $target{template});
my %conf_files = map { $_ => 1 } (@{$target{_conf_fname_int}});
$config{conf_files} = [ sort keys %conf_files ];
%target = ( %{$table{DEFAULTS}}, %target );
foreach my $feature (@{$target{disable}}) {
if (exists $deprecated_disablables{$feature}) {
warn "***** config $target disables deprecated feature $feature\n";
} elsif (!grep { $feature eq $_ } @disablables) {
die "***** config $target disables unknown feature $feature\n";
}
$disabled{$feature} = 'config';
}
foreach my $feature (@{$target{enable}}) {
if ("default" eq ($disabled{$_} // "")) {
if (exists $deprecated_disablables{$feature}) {
warn "***** config $target enables deprecated feature $feature\n";
} elsif (!grep { $feature eq $_ } @disablables) {
die "***** config $target enables unknown feature $feature\n";
}
delete $disabled{$_};
}
}
foreach (sort (keys %disabled)) foreach (sort (keys %disabled))
{ {
$config{options} .= " no-$_"; $config{options} .= " no-$_";
@ -921,25 +959,6 @@ foreach (sort (keys %disabled))
print "\n"; print "\n";
} }
# Support for legacy targets having a name starting with 'debug-'
my ($d, $t) = $target =~ m/^(debug-)?(.*)$/;
if ($d) {
$config{build_type} = "debug";
# If we do not find debug-foo in the table, the target is set to foo.
if (!$table{$target}) {
$target = $t;
}
}
$config{target} = $target;
my %target = resolve_config($target);
&usage if (!%target || $target{template});
my %conf_files = map { $_ => 1 } (@{$target{_conf_fname_int}});
$config{conf_files} = [ sort keys %conf_files ];
%target = ( %{$table{DEFAULTS}}, %target );
$target{cxxflags}=$target{cflags} unless defined $target{cxxflags}; $target{cxxflags}=$target{cflags} unless defined $target{cxxflags};
$target{exe_extension}=""; $target{exe_extension}="";
$target{exe_extension}=".exe" if ($config{target} eq "DJGPP" $target{exe_extension}=".exe" if ($config{target} eq "DJGPP"