linux-kbuild.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5][GIT PULL] kconfig: updates to localmodconfig
@ 2010-02-25 19:17 Steven Rostedt
  2010-02-25 19:17 ` [PATCH 1/5] kconfig: Create include/generated for localmodconfig Steven Rostedt
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Steven Rostedt @ 2010-02-25 19:17 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds, Andrew Morton, Michal Marek, linux-kbuild


Linus,

Please pull the latest for-linus-2 tree, which can be found at:

  git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-kconfig.git
for-linus-2


Michal Marek (1):
      kconfig: Simplify LSMOD= handling

Steven Rostedt (4):
      kconfig: Create include/generated for localmodconfig
      kconfig: Check for if conditions in Kconfig for localmodconfig
      kconfig: Look in both /bin and /sbin for lsmod in streamline_config.pl
      kconfig: Add LSMOD=file to override the lsmod for localmodconfig

----
 scripts/kconfig/Makefile             |   14 +++++++-
 scripts/kconfig/streamline_config.pl |   59 ++++++++++++++++++++++++++++++++-
 2 files changed, 69 insertions(+), 4 deletions(-)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/5] kconfig: Create include/generated for localmodconfig
  2010-02-25 19:17 [PATCH 0/5][GIT PULL] kconfig: updates to localmodconfig Steven Rostedt
@ 2010-02-25 19:17 ` Steven Rostedt
  2010-02-25 19:17 ` [PATCH 2/5] kconfig: Check for if conditions in Kconfig " Steven Rostedt
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2010-02-25 19:17 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds, Andrew Morton, Michal Marek, linux-kbuild

[-- Attachment #1: 0001-kconfig-Create-include-generated-for-localmodconfig.patch --]
[-- Type: text/plain, Size: 1242 bytes --]

From: Steven Rostedt <srostedt@redhat.com>

If someone downloads a brand new kernel and runs localmodconfig or
localyesconfig, the ending result will report:

 *** Error during update of the kernel configuration.

This is because localmodconfig and localyesconfig must create the
include/generated directory to place the autoconf.h file.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 scripts/kconfig/Makefile |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 999e8a7..006c96f 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -31,6 +31,7 @@ silentoldconfig: $(obj)/conf
 	$< -s $(Kconfig)
 
 localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
+	$(Q)mkdir -p include/generated
 	$(Q)perl $< $(srctree) $(Kconfig) > .tmp.config
 	$(Q)if [ -f .config ]; then 				\
 			cmp -s .tmp.config .config ||		\
@@ -45,6 +46,7 @@ localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
 	$(Q)rm -f .tmp.config
 
 localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
+	$(Q)mkdir -p include/generated
 	$(Q)perl $< $(srctree) $(Kconfig) > .tmp.config
 	$(Q)sed -i s/=m/=y/ .tmp.config
 	$(Q)if [ -f .config ]; then 				\
-- 
1.6.5



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/5] kconfig: Check for if conditions in Kconfig for localmodconfig
  2010-02-25 19:17 [PATCH 0/5][GIT PULL] kconfig: updates to localmodconfig Steven Rostedt
  2010-02-25 19:17 ` [PATCH 1/5] kconfig: Create include/generated for localmodconfig Steven Rostedt
@ 2010-02-25 19:17 ` Steven Rostedt
  2010-02-25 19:17 ` [PATCH 3/5] kconfig: Look in both /bin and /sbin for lsmod in streamline_config.pl Steven Rostedt
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2010-02-25 19:17 UTC (permalink / raw)
  To: linux-kernel
  Cc: Linus Torvalds, Andrew Morton, Michal Marek, linux-kbuild,
	Anton Blanchard

[-- Attachment #1: 0002-kconfig-Check-for-if-conditions-in-Kconfig-for-local.patch --]
[-- Type: text/plain, Size: 1972 bytes --]

From: Steven Rostedt <srostedt@redhat.com>

The streamline_config.pl misses the if conditions for checking
dependencies. For Kconfigs with the following construct:

 if MEDIA_SUPPORT

 config VIDEO_DEV

 [...]

If VIDEO_DEV was enabled, the script will miss the fact that MEDIA_SUPPORT
is also needed.

This patch changes streamline_config.pl to include if conditions into
the dependencies of configs.

Reported-by: Anton Blanchard <anton@sambo.org>
Tested-by: Anton Blanchard <anton@sambo.org>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 scripts/kconfig/streamline_config.pl |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
index 0d80082..9e66fa8 100644
--- a/scripts/kconfig/streamline_config.pl
+++ b/scripts/kconfig/streamline_config.pl
@@ -121,6 +121,8 @@ my %prompts;
 my %objects;
 my $var;
 my $cont = 0;
+my $iflevel = 0;
+my @ifdeps;
 
 # prevent recursion
 my %read_kconfigs;
@@ -146,6 +148,15 @@ sub read_kconfig {
 	    $state = "NEW";
 	    $config = $1;
 
+	    for (my $i = 0; $i < $iflevel; $i++) {
+		if ($i) {
+		    $depends{$config} .= " " . $ifdeps[$i];
+		} else {
+		    $depends{$config} = $ifdeps[$i];
+		}
+		$state = "DEP";
+	    }
+
 	# collect the depends for the config
 	} elsif ($state eq "NEW" && /^\s*depends\s+on\s+(.*)$/) {
 	    $state = "DEP";
@@ -166,6 +177,21 @@ sub read_kconfig {
 	    # note if the config has a prompt
 	    $prompt{$config} = 1;
 
+	# Check for if statements
+	} elsif (/^if\s+(.*\S)\s*$/) {
+	    my $deps = $1;
+	    # remove beginning and ending non text
+	    $deps =~ s/^[^a-zA-Z0-9_]*//;
+	    $deps =~ s/[^a-zA-Z0-9_]*$//;
+
+	    my @deps = split /[^a-zA-Z0-9_]+/, $deps;
+
+	    $ifdeps[$iflevel++] = join ':', @deps;
+
+	} elsif (/^endif/) {
+
+	    $iflevel-- if ($iflevel);
+
 	# stop on "help"
 	} elsif (/^\s*help\s*$/) {
 	    $state = "NONE";
-- 
1.6.5



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/5] kconfig: Look in both /bin and /sbin for lsmod in streamline_config.pl
  2010-02-25 19:17 [PATCH 0/5][GIT PULL] kconfig: updates to localmodconfig Steven Rostedt
  2010-02-25 19:17 ` [PATCH 1/5] kconfig: Create include/generated for localmodconfig Steven Rostedt
  2010-02-25 19:17 ` [PATCH 2/5] kconfig: Check for if conditions in Kconfig " Steven Rostedt
@ 2010-02-25 19:17 ` Steven Rostedt
  2010-02-25 19:17 ` [PATCH 4/5] kconfig: Add LSMOD=file to override the lsmod for localmodconfig Steven Rostedt
  2010-02-25 19:18 ` [PATCH 5/5] kconfig: Simplify LSMOD= handling Steven Rostedt
  4 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2010-02-25 19:17 UTC (permalink / raw)
  To: linux-kernel
  Cc: Linus Torvalds, Andrew Morton, Michal Marek, linux-kbuild,
	Xavier Chantry

[-- Attachment #1: 0003-kconfig-Look-in-both-bin-and-sbin-for-lsmod-in-strea.patch --]
[-- Type: text/plain, Size: 1274 bytes --]

From: Steven Rostedt <srostedt@redhat.com>

Distributions now have lsmod in /bin instead of /sbin. But to handle
both cases, we look for it in /sbin /bin /usr/bin and /usr/sbin.
If lsmod is not found in any of those paths, it defaults to use
just lsmod and hopes that it lies in the path of the user.

Tested-by: Xavier Chantry <shiningxc@gmail.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 scripts/kconfig/streamline_config.pl |   15 ++++++++++++++-
 1 files changed, 14 insertions(+), 1 deletions(-)

diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
index 9e66fa8..d7f7db7 100644
--- a/scripts/kconfig/streamline_config.pl
+++ b/scripts/kconfig/streamline_config.pl
@@ -264,7 +264,20 @@ foreach my $makefile (@makefiles) {
 my %modules;
 
 # see what modules are loaded on this system
-open(LIN,"/sbin/lsmod|") || die "Cant lsmod";
+my $lsmod;
+
+foreach $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
+    if ( -x "$dir/lsmod" ) {
+	$lsmod = "$dir/lsmod";
+	last;
+    }
+}
+if (!defined($lsmod)) {
+    # try just the path
+    $lsmod = "lsmod";
+}
+
+open(LIN,"$lsmod|") || die "Can not call lsmod with $lsmod";
 while (<LIN>) {
 	next if (/^Module/);  # Skip the first line.
 	if (/^(\S+)/) {
-- 
1.6.5



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 4/5] kconfig: Add LSMOD=file to override the lsmod for localmodconfig
  2010-02-25 19:17 [PATCH 0/5][GIT PULL] kconfig: updates to localmodconfig Steven Rostedt
                   ` (2 preceding siblings ...)
  2010-02-25 19:17 ` [PATCH 3/5] kconfig: Look in both /bin and /sbin for lsmod in streamline_config.pl Steven Rostedt
@ 2010-02-25 19:17 ` Steven Rostedt
  2010-02-25 19:18 ` [PATCH 5/5] kconfig: Simplify LSMOD= handling Steven Rostedt
  4 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2010-02-25 19:17 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds, Andrew Morton, Michal Marek, linux-kbuild

[-- Attachment #1: 0004-kconfig-Add-LSMOD-file-to-override-the-lsmod-for-loc.patch --]
[-- Type: text/plain, Size: 3902 bytes --]

From: Steven Rostedt <srostedt@redhat.com>

Doing the following:

	make LSMOD=file localmodconfig

Will make the streamline-config code use the given file instead of
lsmod. If the file is an executable, it will execute it, otherwise
it will read it as text.

	make LSMOD=/my/local/path/lsmod localmodconfig

The above will execute the lsmod in /my/local/path instead of the
lsmods that may be located elsewhere.

	make LSMOD=embedded_board_lsmod localmodconfig

The above will read the "embedded_board_lsmod" as a text file. This
is useful if you are doing a cross compile and need to run the
config against modules that exist on an embedded device.

Note, if the LSMOD= file does is not a path, it will add the
path to the object directory. That is, the above example will look
for "embedded_board_lsmod" in the directory that the binary will
be built in (the O=dir directory).

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>

 On branch config/linus
---
 scripts/kconfig/Makefile             |   13 +++++++++-
 scripts/kconfig/streamline_config.pl |   38 ++++++++++++++++++++++++---------
 2 files changed, 38 insertions(+), 13 deletions(-)

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 006c96f..85b9065 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -30,9 +30,18 @@ silentoldconfig: $(obj)/conf
 	$(Q)mkdir -p include/generated
 	$< -s $(Kconfig)
 
+# if no path is given, then use src directory to find file
+ifdef LSMOD
+LSMOD_F = $(shell if [ `basename $(LSMOD)` == $(LSMOD) ]; then \
+		echo $(objtree)/$(LSMOD);			\
+	else							\
+		echo $(LSMOD);					\
+	fi)
+endif
+
 localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
 	$(Q)mkdir -p include/generated
-	$(Q)perl $< $(srctree) $(Kconfig) > .tmp.config
+	$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
 	$(Q)if [ -f .config ]; then 				\
 			cmp -s .tmp.config .config ||		\
 			(mv -f .config .config.old.1;		\
@@ -47,7 +56,7 @@ localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
 
 localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
 	$(Q)mkdir -p include/generated
-	$(Q)perl $< $(srctree) $(Kconfig) > .tmp.config
+	$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
 	$(Q)sed -i s/=m/=y/ .tmp.config
 	$(Q)if [ -f .config ]; then 				\
 			cmp -s .tmp.config .config ||		\
diff --git a/scripts/kconfig/streamline_config.pl b/scripts/kconfig/streamline_config.pl
index d7f7db7..afbd54a 100644
--- a/scripts/kconfig/streamline_config.pl
+++ b/scripts/kconfig/streamline_config.pl
@@ -113,6 +113,7 @@ find_config;
 # Get the build source and top level Kconfig file (passed in)
 my $ksource = $ARGV[0];
 my $kconfig = $ARGV[1];
+my $lsmod_file = $ARGV[2];
 
 my @makefiles = `find $ksource -name Makefile`;
 my %depends;
@@ -263,21 +264,36 @@ foreach my $makefile (@makefiles) {
 
 my %modules;
 
-# see what modules are loaded on this system
-my $lsmod;
-
-foreach $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
-    if ( -x "$dir/lsmod" ) {
-	$lsmod = "$dir/lsmod";
-	last;
+if (defined($lsmod_file)) {
+    if ( ! -f $lsmod_file) {
+	die "$lsmod_file not found";
+    }
+    if ( -x $lsmod_file) {
+	# the file is executable, run it
+	open(LIN, "$lsmod_file|");
+    } else {
+	# Just read the contents
+	open(LIN, "$lsmod_file");
     }
+} else {
+
+    # see what modules are loaded on this system
+    my $lsmod;
+
+    foreach $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
+	if ( -x "$dir/lsmod" ) {
+	    $lsmod = "$dir/lsmod";
+	    last;
+	}
 }
-if (!defined($lsmod)) {
-    # try just the path
-    $lsmod = "lsmod";
+    if (!defined($lsmod)) {
+	# try just the path
+	$lsmod = "lsmod";
+    }
+
+    open(LIN,"$lsmod|") || die "Can not call lsmod with $lsmod";
 }
 
-open(LIN,"$lsmod|") || die "Can not call lsmod with $lsmod";
 while (<LIN>) {
 	next if (/^Module/);  # Skip the first line.
 	if (/^(\S+)/) {
-- 
1.6.5



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 5/5] kconfig: Simplify LSMOD= handling
  2010-02-25 19:17 [PATCH 0/5][GIT PULL] kconfig: updates to localmodconfig Steven Rostedt
                   ` (3 preceding siblings ...)
  2010-02-25 19:17 ` [PATCH 4/5] kconfig: Add LSMOD=file to override the lsmod for localmodconfig Steven Rostedt
@ 2010-02-25 19:18 ` Steven Rostedt
  4 siblings, 0 replies; 6+ messages in thread
From: Steven Rostedt @ 2010-02-25 19:18 UTC (permalink / raw)
  To: linux-kernel; +Cc: Linus Torvalds, Andrew Morton, Michal Marek, linux-kbuild

[-- Attachment #1: 0005-kconfig-Simplify-LSMOD-handling.patch --]
[-- Type: text/plain, Size: 886 bytes --]

From: Michal Marek <mmarek@suse.cz>

Signed-off-by: Michal Marek <mmarek@suse.cz>
LKML-Reference: <20100203162014.GA10956@sepie.suse.cz>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
---
 scripts/kconfig/Makefile |    9 ++++-----
 1 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
index 85b9065..186c466 100644
--- a/scripts/kconfig/Makefile
+++ b/scripts/kconfig/Makefile
@@ -32,11 +32,10 @@ silentoldconfig: $(obj)/conf
 
 # if no path is given, then use src directory to find file
 ifdef LSMOD
-LSMOD_F = $(shell if [ `basename $(LSMOD)` == $(LSMOD) ]; then \
-		echo $(objtree)/$(LSMOD);			\
-	else							\
-		echo $(LSMOD);					\
-	fi)
+LSMOD_F := $(LSMOD)
+ifeq ($(findstring /,$(LSMOD)),)
+  LSMOD_F := $(objtree)/$(LSMOD)
+endif
 endif
 
 localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
-- 
1.6.5



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2010-02-25 19:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-25 19:17 [PATCH 0/5][GIT PULL] kconfig: updates to localmodconfig Steven Rostedt
2010-02-25 19:17 ` [PATCH 1/5] kconfig: Create include/generated for localmodconfig Steven Rostedt
2010-02-25 19:17 ` [PATCH 2/5] kconfig: Check for if conditions in Kconfig " Steven Rostedt
2010-02-25 19:17 ` [PATCH 3/5] kconfig: Look in both /bin and /sbin for lsmod in streamline_config.pl Steven Rostedt
2010-02-25 19:17 ` [PATCH 4/5] kconfig: Add LSMOD=file to override the lsmod for localmodconfig Steven Rostedt
2010-02-25 19:18 ` [PATCH 5/5] kconfig: Simplify LSMOD= handling Steven Rostedt

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).