kconfig.pl: fix handling of multiple kmod-* package referencing the same KCONFIG symbols

SVN-Revision: 19366
This commit is contained in:
Felix Fietkau 2010-01-28 19:27:43 +00:00
parent 40b531f5d2
commit 75e38a19cf

View file

@ -12,19 +12,32 @@ use strict;
my @arg;
my $PREFIX = "CONFIG_";
sub load_config($) {
sub set_config($$$$) {
my $config = shift;
my $idx = shift;
my $newval = shift;
my $mod_plus = shift;
if (!defined($config->{$idx}) or !$mod_plus or
$config->{$idx} eq '#undef' or $newval eq 'y') {
$config->{$idx} = $newval;
}
}
sub load_config($$) {
my $file = shift;
my $mod_plus = shift;
my %config;
open FILE, "$file" or die "can't open file";
while (<FILE>) {
chomp;
/^$PREFIX(.+?)=(.+)/ and do {
$config{$1} = $2;
set_config(\%config, $1, $2, $mod_plus);
next;
};
/^# $PREFIX(.+?) is not set/ and do {
$config{$1} = "#undef";
set_config(\%config, $1, "#undef", $mod_plus);
next;
};
/^#/ and next;
@ -111,14 +124,13 @@ sub dump_config($) {
}
}
sub parse_expr($);
sub parse_expr($) {
sub parse_expr {
my $pos = shift;
my $mod_plus = shift;
my $arg = $arg[$$pos++];
die "Parse error" if (!$arg);
if ($arg eq '&') {
my $arg1 = parse_expr($pos);
my $arg2 = parse_expr($pos);
@ -129,7 +141,7 @@ sub parse_expr($) {
return config_add($arg1, $arg2, 0);
} elsif ($arg =~ /^m\+/) {
my $arg1 = parse_expr($pos);
my $arg2 = parse_expr($pos);
my $arg2 = parse_expr($pos, 1);
return config_add($arg1, $arg2, 1);
} elsif ($arg eq '>') {
my $arg1 = parse_expr($pos);
@ -140,7 +152,7 @@ sub parse_expr($) {
my $arg2 = parse_expr($pos);
return config_sub($arg1, $arg2);
} else {
return load_config($arg);
return load_config($arg, $mod_plus);
}
}