mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-23 23:46:16 +02:00
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-a3cf2f4a3e73
This commit is contained in:
parent
b10341b15c
commit
ddac78a768
@ -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,14 +124,13 @@ 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);
|
||||||
|
|
||||||
if ($arg eq '&') {
|
if ($arg eq '&') {
|
||||||
my $arg1 = parse_expr($pos);
|
my $arg1 = parse_expr($pos);
|
||||||
my $arg2 = parse_expr($pos);
|
my $arg2 = parse_expr($pos);
|
||||||
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user