* [PATCH 0/2] kconfig/streamline-config.pl: Fix missed module loaded
@ 2012-01-13 23:11 Steven Rostedt
2012-01-13 23:11 ` [PATCH 1/2] kconfig/streamline-config.pl: Simplify backslash line concatination Steven Rostedt
2012-01-13 23:12 ` [PATCH 2/2] kconfig/streamline-config.pl: Fix parsing Makefile with variables Steven Rostedt
0 siblings, 2 replies; 4+ messages in thread
From: Steven Rostedt @ 2012-01-13 23:11 UTC (permalink / raw)
To: linux-kernel, linux-kbuild
Cc: Linus Torvalds, Michal Marek, Andrew Morton, Thomas Lange
[-- Attachment #1: Type: text/plain, Size: 1137 bytes --]
Linus,
I received a bug report from Thomas Lange, saying that after doing
a "make localmodconfig" his module 'brcmsmac' was missing. He tried
this on a few different kernels and said that it was always turning
off this module even though he had it loaded during the make localmodconfig.
I looked into it and found that that Makefile uses a variable to set
the module name:
obj-$(CONFIG_BRCMSMAC) += $(MODULEPFX).o
These two patches make localmodconfig handle this case.
The first patch is a clean up that makes the second patch easier to do.
I'm also sending these to stable.
-- Steve
Please pull the latest for-linus tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-kconfig.git
for-linus
Head SHA1: 364212fddaaa60c5a64f67a0f5624ad996ecc8a0
Steven Rostedt (2):
kconfig/streamline-config.pl: Simplify backslash line concatination
kconfig/streamline-config.pl: Fix parsing Makefile with variables
----
scripts/kconfig/streamline_config.pl | 52 ++++++++++++++++++++++++++--------
1 files changed, 40 insertions(+), 12 deletions(-)
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] kconfig/streamline-config.pl: Simplify backslash line concatination
2012-01-13 23:11 [PATCH 0/2] kconfig/streamline-config.pl: Fix missed module loaded Steven Rostedt
@ 2012-01-13 23:11 ` Steven Rostedt
2012-01-13 23:12 ` [PATCH 2/2] kconfig/streamline-config.pl: Fix parsing Makefile with variables Steven Rostedt
1 sibling, 0 replies; 4+ messages in thread
From: Steven Rostedt @ 2012-01-13 23:11 UTC (permalink / raw)
To: linux-kernel, linux-kbuild
Cc: Linus Torvalds, Michal Marek, Andrew Morton, Thomas Lange, stable
[-- Attachment #1: Type: text/plain, Size: 1676 bytes --]
From: Steven Rostedt <srostedt@redhat.com>
Simplify the way lines ending with backslashes (continuation) in Makefiles
is parsed. This is needed to implement a necessary fix.
Tested-by: Thomas Lange <thomas-lange2@gmx.de>
Cc: stable@vger.kernel.org
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
scripts/kconfig/streamline_config.pl | 25 ++++++++++++-------------
1 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
index ec7afce..42ef5ea 100644
--- a/scripts/kconfig/streamline_config.pl
+++ b/scripts/kconfig/streamline_config.pl
@@ -253,17 +253,22 @@ if ($kconfig) {
# Read all Makefiles to map the configs to the objects
foreach my $makefile (@makefiles) {
- my $cont = 0;
+ my $line = "";
open(MIN,$makefile) || die "Can't open $makefile";
while (<MIN>) {
- my $objs;
-
- # is this a line after a line with a backslash?
- if ($cont && /(\S.*)$/) {
- $objs = $1;
+ # if this line ends with a backslash, continue
+ chomp;
+ if (/^(.*)\\$/) {
+ $line .= $1;
+ next;
}
- $cont = 0;
+
+ $line .= $_;
+ $_ = $line;
+ $line = "";
+
+ my $objs;
# collect objects after obj-$(CONFIG_FOO_BAR)
if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
@@ -271,12 +276,6 @@ foreach my $makefile (@makefiles) {
$objs = $2;
}
if (defined($objs)) {
- # test if the line ends with a backslash
- if ($objs =~ m,(.*)\\$,) {
- $objs = $1;
- $cont = 1;
- }
-
foreach my $obj (split /\s+/,$objs) {
$obj =~ s/-/_/g;
if ($obj =~ /(.*)\.o$/) {
--
1.7.7.3
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] kconfig/streamline-config.pl: Fix parsing Makefile with variables
2012-01-13 23:11 [PATCH 0/2] kconfig/streamline-config.pl: Fix missed module loaded Steven Rostedt
2012-01-13 23:11 ` [PATCH 1/2] kconfig/streamline-config.pl: Simplify backslash line concatination Steven Rostedt
@ 2012-01-13 23:12 ` Steven Rostedt
2012-01-14 6:20 ` Paul Bolle
1 sibling, 1 reply; 4+ messages in thread
From: Steven Rostedt @ 2012-01-13 23:12 UTC (permalink / raw)
To: linux-kernel, linux-kbuild
Cc: Linus Torvalds, Michal Marek, Andrew Morton, Thomas Lange,
Arend van Spriel, stable
[-- Attachment #1: Type: text/plain, Size: 2600 bytes --]
From: Steven Rostedt <srostedt@redhat.com>
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>
---
scripts/kconfig/streamline_config.pl | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
index 42ef5ea..bccf07d 100644
--- a/scripts/kconfig/streamline_config.pl
+++ b/scripts/kconfig/streamline_config.pl
@@ -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) {
--
1.7.7.3
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] kconfig/streamline-config.pl: Fix parsing Makefile with variables
2012-01-13 23:12 ` [PATCH 2/2] kconfig/streamline-config.pl: Fix parsing Makefile with variables Steven Rostedt
@ 2012-01-14 6:20 ` Paul Bolle
0 siblings, 0 replies; 4+ messages in thread
From: Paul Bolle @ 2012-01-14 6:20 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, linux-kbuild, Linus Torvalds, Michal Marek,
Andrew Morton, Thomas Lange, Arend van Spriel, stable
Steven,
A few remarks follow. (Mainly suggesting to add a some comments.)
On Fri, 2012-01-13 at 18:12 -0500, Steven Rostedt wrote:
> From: Steven Rostedt <srostedt@redhat.com>
>
> 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>
> ---
> scripts/kconfig/streamline_config.pl | 29 +++++++++++++++++++++++++++++
> 1 files changed, 29 insertions(+), 0 deletions(-)
>
> diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
> index 42ef5ea..bccf07d 100644
> --- a/scripts/kconfig/streamline_config.pl
> +++ b/scripts/kconfig/streamline_config.pl
> @@ -250,10 +250,33 @@ if ($kconfig) {
> read_kconfig($kconfig);
> }
>
> +sub convert_vars {
> + my ($line, %vars) = @_;
> +
> + my $process = "";
> +
> + while ($line =~ s/^(.*?)(\$\((.*?)\))//) {
I know just enough perl to be dangerous. But I'm guessing that even
people more familiar with perl (and regexes) wouldn't mind a short
comment here. Perhaps something like
# handle all occurrences of "$(VAR)" in this line
> + my $start = $1;
> + my $variable = $2;
> + my $var = $3;
Using both "$variable" and "$var" is a bit awkward. Perhaps "$name"
instead of "$var"?
> +
> + if (defined($vars{$var})) {
> + $process .= $start . $vars{$var};
> + } else {
Add
# Unknown variable, just put it back
here (or something similar)?
> + $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*(.*)/) {
This is unrelated to this patch, but anyhow. Doing
git grep -n "obj-" $(git ls-files "*Makefile*") | grep CONFIG | grep -v "obj-\$(CONFIG"
generated three types of possible corner cases here. Some examples:
0) "obj-pci-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pci.o"
(there are about a dozen of these)
and
"obj-pvrusb2-sysfs-$(CONFIG_VIDEO_PVRUSB2_SYSFS) := pvrusb2-sysfs.o"
(three times)
Are these relevant for this script?
1) "obj-${CONFIG_EISA_PCI_EISA} += pci_eisa.o"
(three times)
The braces look a bit odd. Shouldn't that be parentheses, at least to be
consistent? Michal?
2) "obj-$(subst m,y,$(CONFIG_VLAN_8021Q)) += vlan_core.o"
(about a dozen times)
I do not know what subst actually does here, but this might be missed by
this script too. Relevant?
Do these corner cases merit further attention?
> $var = $1;
> $objs = $2;
> +
> + # check if variables are set
"[...] and safe them for future substitution"?
> + } elsif (/^\s*(\S+)\s*[:]?=\s*(.*\S)/) {
> + $make_vars{$1} = $2;
> }
> if (defined($objs)) {
> foreach my $obj (split /\s+/,$objs) {
Paul Bolle
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-01-14 6:21 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-13 23:11 [PATCH 0/2] kconfig/streamline-config.pl: Fix missed module loaded Steven Rostedt
2012-01-13 23:11 ` [PATCH 1/2] kconfig/streamline-config.pl: Simplify backslash line concatination Steven Rostedt
2012-01-13 23:12 ` [PATCH 2/2] kconfig/streamline-config.pl: Fix parsing Makefile with variables Steven Rostedt
2012-01-14 6:20 ` Paul Bolle
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).