kconfig.pl: fix handling of multiple kmod-* package referencing the same KCONFIG symbols
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19366 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
2aa445dfe9
commit
b90f1fe190
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue