* [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