Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-kconfig

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-kconfig:
  kconfig/streamline-config.pl: Fix parsing Makefile with variables
  kconfig/streamline-config.pl: Simplify backslash line concatination
This commit is contained in:
Linus Torvalds 2012-01-14 17:59:02 -08:00
commit 1e6c4dfdeb
1 changed files with 40 additions and 12 deletions

View File

@ -250,33 +250,61 @@ if ($kconfig) {
read_kconfig($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 # Read all Makefiles to map the configs to the objects
foreach my $makefile (@makefiles) { foreach my $makefile (@makefiles) {
my $cont = 0; my $line = "";
my %make_vars;
open(MIN,$makefile) || die "Can't open $makefile"; open(MIN,$makefile) || die "Can't open $makefile";
while (<MIN>) { while (<MIN>) {
# if this line ends with a backslash, continue
chomp;
if (/^(.*)\\$/) {
$line .= $1;
next;
}
$line .= $_;
$_ = $line;
$line = "";
my $objs; my $objs;
# is this a line after a line with a backslash? $_ = convert_vars($_, %make_vars);
if ($cont && /(\S.*)$/) {
$objs = $1;
}
$cont = 0;
# collect objects after obj-$(CONFIG_FOO_BAR) # collect objects after obj-$(CONFIG_FOO_BAR)
if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) { if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
$var = $1; $var = $1;
$objs = $2; $objs = $2;
# check if variables are set
} elsif (/^\s*(\S+)\s*[:]?=\s*(.*\S)/) {
$make_vars{$1} = $2;
} }
if (defined($objs)) { if (defined($objs)) {
# test if the line ends with a backslash
if ($objs =~ m,(.*)\\$,) {
$objs = $1;
$cont = 1;
}
foreach my $obj (split /\s+/,$objs) { foreach my $obj (split /\s+/,$objs) {
$obj =~ s/-/_/g; $obj =~ s/-/_/g;
if ($obj =~ /(.*)\.o$/) { if ($obj =~ /(.*)\.o$/) {