Commit 906eb3d0 authored by Richard Levitte's avatar Richard Levitte
Browse files

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

parent 410e8c93
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -42,6 +42,10 @@


    BASE_common => {
    BASE_common => {
	template	=> 1,
	template	=> 1,

	enable		=> [],
	disable		=> [],

	defines		=>
	defines		=>
	    sub {
	    sub {
                my @defs = ();
                my @defs = ();
+7 −0
Original line number Original line Diff line number Diff line
@@ -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
+38 −19
Original line number Original line Diff line number Diff line
@@ -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"