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

SVN-Revision: 19366
lede-17.01
Felix Fietkau 2010-01-28 19:27:43 +00:00
parent 40b531f5d2
commit 75e38a19cf
1 changed files with 22 additions and 10 deletions

View File

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