kconfig/streamline-config.pl: Fix parsing Makefile with variables
Thomas Lange reported that when he did a 'make localmodconfig', his config was missing the brcmsmac driver, even though he had the module loaded. Looking into this, I found the file: drivers/net/wireless/brcm80211/brcmsmac/Makefile had the following in the Makefile: MODULEPFX := brcmsmac obj-$(CONFIG_BRCMSMAC) += $(MODULEPFX).o The way streamline-config.pl works, is parsing all the obj-$(CONFIG_FOO) += foo.o lines to find that CONFIG_FOO belongs to the module foo.ko. But in this case, the brcmsmac.o was not used, but a variable in its place. By changing streamline-config.pl to remember defined variables in Makefiles and substituting them when they are used in the obj-X lines, allows Thomas (and others) to have their brcmsmac module stay configured when it is loaded and running "make localmodconfig". Reported-by: Thomas Lange <thomas-lange2@gmx.de> Tested-by: Thomas Lange <thomas-lange2@gmx.de> Cc: Arend van Spriel <arend@broadcom.com> Cc: stable@vger.kernel.org Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
parent
d060d963e8
commit
364212fdda
|
@ -250,10 +250,33 @@ if ($kconfig) {
|
|||
read_kconfig($kconfig);
|
||||
}
|
||||
|
||||
sub convert_vars {
|
||||
my ($line, %vars) = @_;
|
||||
|
||||
my $process = "";
|
||||
|
||||
while ($line =~ s/^(.*?)(\$\((.*?)\))//) {
|
||||
my $start = $1;
|
||||
my $variable = $2;
|
||||
my $var = $3;
|
||||
|
||||
if (defined($vars{$var})) {
|
||||
$process .= $start . $vars{$var};
|
||||
} else {
|
||||
$process .= $start . $variable;
|
||||
}
|
||||
}
|
||||
|
||||
$process .= $line;
|
||||
|
||||
return $process;
|
||||
}
|
||||
|
||||
# Read all Makefiles to map the configs to the objects
|
||||
foreach my $makefile (@makefiles) {
|
||||
|
||||
my $line = "";
|
||||
my %make_vars;
|
||||
|
||||
open(MIN,$makefile) || die "Can't open $makefile";
|
||||
while (<MIN>) {
|
||||
|
@ -270,10 +293,16 @@ foreach my $makefile (@makefiles) {
|
|||
|
||||
my $objs;
|
||||
|
||||
$_ = convert_vars($_, %make_vars);
|
||||
|
||||
# collect objects after obj-$(CONFIG_FOO_BAR)
|
||||
if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
|
||||
$var = $1;
|
||||
$objs = $2;
|
||||
|
||||
# check if variables are set
|
||||
} elsif (/^\s*(\S+)\s*[:]?=\s*(.*\S)/) {
|
||||
$make_vars{$1} = $2;
|
||||
}
|
||||
if (defined($objs)) {
|
||||
foreach my $obj (split /\s+/,$objs) {
|
||||
|
|
Loading…
Reference in New Issue