lkml.org 
[lkml]   [2012]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[43/90] kconfig/streamline-config.pl: Fix parsing Makefile with variables
    3.0-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Steven Rostedt <srostedt@redhat.com>

    commit 364212fddaaa60c5a64f67a0f5624ad996ecc8a0 upstream.

    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>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    scripts/kconfig/streamline_config.pl | 29 +++++++++++++++++++++++++++++
    1 file changed, 29 insertions(+)

    --- a/scripts/kconfig/streamline_config.pl
    +++ b/scripts/kconfig/streamline_config.pl
    @@ -242,10 +242,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>) {
    @@ -262,10 +285,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) {



    \
     
     \ /
      Last update: 2012-01-24 01:07    [W:0.027 / U:90.956 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site