All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line
@ 2009-01-03  2:21 Andi Kleen
  2009-01-03  2:21 ` [PATCH] [2/3] KBUILD: Add a symlink to the source for separate objdirs Andi Kleen
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Andi Kleen @ 2009-01-03  2:21 UTC (permalink / raw)
  To: linux-kbuild, sam, linux-kernel


I often change single options in .config files. Instead of using
an editor or one of the frontends it's convenient to do this from
the command line. It's also useful to do from automated build scripts
when building different variants from a base config file.

I extracted most of the CONFIG manipulation code from one of my
build scripts into a new shell script scripts/config

The script is not integrated with the normal Kconfig machinery
and doesn't do any checking against Kconfig files, but just manipulates
that text format. This is always done at make time anyways.

I believe this script would be a useful standard addition for scripts/*

Sample usage:

./scripts/config --disable smp 
Disable SMP in .config file

./scripts/config --file otherdir/.config --module e1000e
Enable E1000E as module in otherdir/.config

./scripts/config --state smp
y 
Check state of config option CONFIG_SMP

After merging into git please make scripts/config executable

Signed-off-by: Andi Kleen <ak@linux.intel.com>

---
 scripts/config |  150 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 150 insertions(+)

Index: linux-2.6.28-kbuild/scripts/config
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.28-kbuild/scripts/config	2009-01-02 02:56:11.000000000 +0100
@@ -0,0 +1,150 @@
+#!/bin/bash
+# Manipulate options in a .config file from the command line
+
+usage() {
+	cat >&2 <<EOL
+Manipulate options in a .config file from the command line.
+Usage:
+config options command ...
+commands:
+	--enable|-e option   Enable option
+	--disable|-d option  Disable option
+	--module|-m option      Turn option into a module
+	--state|-s option       Print state of option (n,y,m,undef)
+
+	--enable-after|-E beforeopt option
+                             Enable option directly after other option
+	--disable-after|-D beforeopt option
+                             Disable option directly after other option
+	--module-after|-M beforeopt option
+                             Turn option into module directly after other option
+
+	commands can be repeated multiple times
+
+options:
+	--file .config file to change (default .config)
+
+config doesn't check the validity of the .config file. This is done at next
+ make time.
+The options need to be already in the file before they can be changed,
+but sometimes you can cheat with the --*-after options.
+EOL
+	exit 1
+}
+
+checkarg() {
+	ARG="$1"
+	if [ "$ARG" = "" ] ; then
+		usage
+	fi
+	case "$ARG" in
+	CONFIG_*)
+		ARG="${ARG/CONFIG_/}"
+		;;
+	esac
+	ARG="`echo $ARG | tr a-z A-Z`"
+}
+
+replace() {
+	sed -i -e "$@" $FN
+}
+
+if [ "$1" = "--file" ]; then
+	FN="$2"
+	if [ "$FN" = "" ] ; then
+		usage
+	fi
+	shift
+	shift
+else
+	FN=.config
+fi
+
+while [ "$1" != "" ] ; do
+	CMD="$1"
+	shift
+	case "$CMD" in
+	--enable|-e)
+		checkarg "$1"
+		replace "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/"
+		shift
+		;;
+
+	--disable|-d)
+		checkarg "$1"
+		replace "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/"
+		shift
+		;;
+
+	--module|-m)
+		checkarg "$1"
+		replace "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \
+			-e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/"
+		shift
+		;;
+
+	--state|-s)
+		checkarg "$1"
+		if grep -q "# CONFIG_$ARG is not set" $FN ; then
+			echo n
+		else
+			V="$(grep "^CONFIG_$ARG=" $FN)"
+			if [ $? != 0 ] ; then
+				echo undef
+			else
+				V="${V/CONFIG_$ARG=/}"
+				V="${V/\"/}"
+				echo "$V"
+			fi
+		fi
+		shift
+		;;
+
+	--enable-after|-E)
+		checkarg "$1"
+		A=$ARG
+		checkarg "$2"
+		B=$ARG
+		replace "/CONFIG_$A=[my]/aCONFIG_$B=y" \
+			-e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=y" \
+			-e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=y/"
+		shift
+		shift
+		;;
+
+	--disable-after|-D)
+		checkarg "$1"
+		A=$ARG
+		checkarg "$2"
+		B=$ARG
+		replace "/CONFIG_$A=[my]/a# CONFIG_$B is not set" \
+		-e "/# CONFIG_$ARG is not set/a/# CONFIG_$ARG is not set" \
+		-e "s/CONFIG_$ARG=[my]/# CONFIG_$ARG is not set/"
+		shift
+		shift
+		;;
+
+	--module-after|-M)
+		checkarg "$1"
+		A=$ARG
+		checkarg "$2"
+		B=$ARG
+		replace "/CONFIG_$A=[my]/aCONFIG_$B=m" \
+			-e "/# CONFIG_$ARG is not set/a/CONFIG_$ARG=m" \
+			-e "s/CONFIG_$ARG=y/CONFIG_$ARG=m/" \
+			-e "s/# CONFIG_$ARG is not set/CONFIG_$ARG=m/"
+		shift
+		shift
+		;;
+
+	# undocumented because it ignores --file (fixme)
+	--refresh)
+		yes "" | make oldconfig
+		;;
+
+	*)
+		usage
+		;;
+	esac
+done
+

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

* [PATCH] [2/3] KBUILD: Add a symlink to the source for separate objdirs
  2009-01-03  2:21 [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Andi Kleen
@ 2009-01-03  2:21 ` Andi Kleen
  2009-01-07 20:29   ` Sam Ravnborg
  2009-01-03  2:21 ` [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too Andi Kleen
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Andi Kleen @ 2009-01-03  2:21 UTC (permalink / raw)
  To: linux-kbuild, sam, linux-kernel


I have some scripts which need to map back to the source directory
from an objdir. This was so far done by parsing the Makefile,
but the Makefile format changes occasionally and breaks my scripts
then.

To make this more reliable add a "source" symlink back. 

Signed-off-by: Andi Kleen <ak@linux.intel.com>

---
 Makefile |    1 +
 1 file changed, 1 insertion(+)

Index: linux-2.6.28-kbuild/Makefile
===================================================================
--- linux-2.6.28-kbuild.orig/Makefile	2008-12-27 16:45:43.000000000 +0100
+++ linux-2.6.28-kbuild/Makefile	2008-12-31 20:26:27.000000000 +0100
@@ -936,6 +936,7 @@
 	    mkdir -p include2;                                          \
 	    ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm;     \
 	fi
+	ln -fsn $(srctree) source
 endif
 
 # prepare2 creates a makefile if using a separate output directory

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

* [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too
  2009-01-03  2:21 [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Andi Kleen
  2009-01-03  2:21 ` [PATCH] [2/3] KBUILD: Add a symlink to the source for separate objdirs Andi Kleen
@ 2009-01-03  2:21 ` Andi Kleen
  2009-01-07 20:27   ` Sam Ravnborg
  2009-01-03 10:54 ` [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Arnd Bergmann
  2009-01-07 20:18 ` Sam Ravnborg
  3 siblings, 1 reply; 12+ messages in thread
From: Andi Kleen @ 2009-01-03  2:21 UTC (permalink / raw)
  To: linux-kbuild, sam, linux-kernel


Several of the scripts in "scripts" are useful to operate on
files in a separate objdir. Instead of always manually typing
the path to the source dir create a convenient symlink to
the source dir's script directory in the objdir too.

I named it bin because scripts was already used for the object
files of scripts.

Signed-off-by: Andi Kleen <ak@linux.intel.com>

---
 Makefile |    1 +
 1 file changed, 1 insertion(+)

Index: linux-2.6.28-kbuild/Makefile
===================================================================
--- linux-2.6.28-kbuild.orig/Makefile	2009-01-01 15:52:52.000000000 +0100
+++ linux-2.6.28-kbuild/Makefile	2009-01-01 15:53:09.000000000 +0100
@@ -937,6 +937,7 @@
 	    ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm;     \
 	fi
 	ln -fsn $(srctree) source
+	ln -fsn $(srctree)/scripts bin
 endif
 
 # prepare2 creates a makefile if using a separate output directory

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

* Re: [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line
  2009-01-03  2:21 [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Andi Kleen
  2009-01-03  2:21 ` [PATCH] [2/3] KBUILD: Add a symlink to the source for separate objdirs Andi Kleen
  2009-01-03  2:21 ` [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too Andi Kleen
@ 2009-01-03 10:54 ` Arnd Bergmann
  2009-01-03 17:12   ` Andi Kleen
  2009-01-07 20:18 ` Sam Ravnborg
  3 siblings, 1 reply; 12+ messages in thread
From: Arnd Bergmann @ 2009-01-03 10:54 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kbuild, sam, linux-kernel

On Saturday 03 January 2009, Andi Kleen wrote:
> 
> I often change single options in .config files. Instead of using
> an editor or one of the frontends it's convenient to do this from
> the command line. It's also useful to do from automated build scripts
> when building different variants from a base config file.
> 
> I extracted most of the CONFIG manipulation code from one of my
> build scripts into a new shell script scripts/config

This looks very useful, thanks for sharing.

> The script is not integrated with the normal Kconfig machinery
> and doesn't do any checking against Kconfig files, but just manipulates
> that text format. This is always done at make time anyways.

Why? I would imagine it to be useful to get immediate feedback
whether changing the option was successful. It should be easy to
run scripts/kconfig/conf -o on the config file afterwards.

My normal workflow when changing single options is to remove the
line from .config and call make oldconfig again. What I would
like to see most here is something like

./scripts/config --reconfigure smp
Remove SMP from .config, and do oldconfig to ask again.

	Arnd <><

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

* Re: [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line
  2009-01-03 10:54 ` [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Arnd Bergmann
@ 2009-01-03 17:12   ` Andi Kleen
  0 siblings, 0 replies; 12+ messages in thread
From: Andi Kleen @ 2009-01-03 17:12 UTC (permalink / raw)
  To: Arnd Bergmann; +Cc: Andi Kleen, linux-kbuild, sam, linux-kernel

On Sat, Jan 03, 2009 at 11:54:44AM +0100, Arnd Bergmann wrote:
> > I extracted most of the CONFIG manipulation code from one of my
> > build scripts into a new shell script scripts/config
> 
> This looks very useful, thanks for sharing.
> 
> > The script is not integrated with the normal Kconfig machinery
> > and doesn't do any checking against Kconfig files, but just manipulates
> > that text format. This is always done at make time anyways.
> 
> Why? I would imagine it to be useful to get immediate feedback
> whether changing the option was successful. It should be easy to
> run scripts/kconfig/conf -o on the config file afterwards.

Mostly so that the script doesn't need to know about the source
directory. That would be another argument, making it harder to use. 
At least my build scripts often run in a different environment. And
make always checks it anyways.

Also I wasn't sure how to change the filename of the config file
without using Kconfig internals.  That would be less of a concern
now if it was merged, but it was one out of tree.

> 
> My normal workflow when changing single options is to remove the
> line from .config and call make oldconfig again. What I would
> like to see most here is something like
> 
> ./scripts/config --reconfigure smp
> Remove SMP from .config, and do oldconfig to ask again.

You don't need the make oldconfig, make always does that automatically.

BTW there's an undocumented option to do this, but I intentionally
didn't document it because it doesn't work with --file due to the
reasons stated above.

-Andi

-- 
ak@linux.intel.com

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

* Re: [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line
  2009-01-03  2:21 [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Andi Kleen
                   ` (2 preceding siblings ...)
  2009-01-03 10:54 ` [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Arnd Bergmann
@ 2009-01-07 20:18 ` Sam Ravnborg
  2009-01-07 21:33   ` Andi Kleen
  3 siblings, 1 reply; 12+ messages in thread
From: Sam Ravnborg @ 2009-01-07 20:18 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kbuild, linux-kernel

On Sat, Jan 03, 2009 at 03:21:41AM +0100, Andi Kleen wrote:
> 
> I often change single options in .config files. Instead of using
> an editor or one of the frontends it's convenient to do this from
> the command line. It's also useful to do from automated build scripts
> when building different variants from a base config file.
> 
> I extracted most of the CONFIG manipulation code from one of my
> build scripts into a new shell script scripts/config
> 
> The script is not integrated with the normal Kconfig machinery
> and doesn't do any checking against Kconfig files, but just manipulates
> that text format. This is always done at make time anyways.
> 
> I believe this script would be a useful standard addition for scripts/*
> 
> Sample usage:
> 
> ./scripts/config --disable smp 
> Disable SMP in .config file
> 
> ./scripts/config --file otherdir/.config --module e1000e
> Enable E1000E as module in otherdir/.config
> 
> ./scripts/config --state smp
> y 
> Check state of config option CONFIG_SMP
> 
> After merging into git please make scripts/config executable
> 
> Signed-off-by: Andi Kleen <ak@linux.intel.com>

When I try to run the script with no arguments nothing happens!?!

I will merge as is but please followup with a patch so it prints out usage
in this situation.

	Sam

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

* Re: [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too
  2009-01-03  2:21 ` [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too Andi Kleen
@ 2009-01-07 20:27   ` Sam Ravnborg
  2009-01-07 21:30     ` Andi Kleen
  0 siblings, 1 reply; 12+ messages in thread
From: Sam Ravnborg @ 2009-01-07 20:27 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kbuild, linux-kernel

On Sat, Jan 03, 2009 at 03:21:43AM +0100, Andi Kleen wrote:
> 
> Several of the scripts in "scripts" are useful to operate on
> files in a separate objdir. Instead of always manually typing
> the path to the source dir create a convenient symlink to
> the source dir's script directory in the objdir too.
> 
> I named it bin because scripts was already used for the object
> files of scripts.

So you suggest we in the O=... case should have
a bin symlink to save you typing "source/sc<tab>

That does not justify another symlink in the output
directory.

	Sam

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

* Re: [PATCH] [2/3] KBUILD: Add a symlink to the source for separate objdirs
  2009-01-03  2:21 ` [PATCH] [2/3] KBUILD: Add a symlink to the source for separate objdirs Andi Kleen
@ 2009-01-07 20:29   ` Sam Ravnborg
  0 siblings, 0 replies; 12+ messages in thread
From: Sam Ravnborg @ 2009-01-07 20:29 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kbuild, linux-kernel

On Sat, Jan 03, 2009 at 03:21:42AM +0100, Andi Kleen wrote:
> 
> I have some scripts which need to map back to the source directory
> from an objdir. This was so far done by parsing the Makefile,
> but the Makefile format changes occasionally and breaks my scripts
> then.
> 
> To make this more reliable add a "source" symlink back. 
> 
> Signed-off-by: Andi Kleen <ak@linux.intel.com>

Like we do when we install modules. Agreed this is usefull.
Applied.

	Sam

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

* Re: [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too
  2009-01-07 20:27   ` Sam Ravnborg
@ 2009-01-07 21:30     ` Andi Kleen
  2009-01-07 21:36       ` Sam Ravnborg
  0 siblings, 1 reply; 12+ messages in thread
From: Andi Kleen @ 2009-01-07 21:30 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: Andi Kleen, linux-kbuild, linux-kernel

On Wed, Jan 07, 2009 at 09:27:12PM +0100, Sam Ravnborg wrote:
> On Sat, Jan 03, 2009 at 03:21:43AM +0100, Andi Kleen wrote:
> > 
> > Several of the scripts in "scripts" are useful to operate on
> > files in a separate objdir. Instead of always manually typing
> > the path to the source dir create a convenient symlink to
> > the source dir's script directory in the objdir too.
> > 
> > I named it bin because scripts was already used for the object
> > files of scripts.
> 
> So you suggest we in the O=... case should have
> a bin symlink to save you typing "source/sc<tab>

Yes.

> 
> That does not justify another symlink in the output
> directory.

Why not? They don't cost anything, do they? And
convenience matters.

-Andi

-- 
ak@linux.intel.com

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

* Re: [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line
  2009-01-07 20:18 ` Sam Ravnborg
@ 2009-01-07 21:33   ` Andi Kleen
  2009-01-07 22:07     ` Sam Ravnborg
  0 siblings, 1 reply; 12+ messages in thread
From: Andi Kleen @ 2009-01-07 21:33 UTC (permalink / raw)
  To: Sam Ravnborg; +Cc: Andi Kleen, linux-kbuild, linux-kernel

> When I try to run the script with no arguments nothing happens!?!
> 
> I will merge as is but please followup with a patch so it prints out usage
> in this situation.

Here's a patch 

-Andi

---

Kbuild: print usage with no arguments in scripts/config

Requested by Sam.

Signed-off-by: Andi Kleen <ak@linux.intel.com>

---
 scripts/config |    4 ++++
 1 file changed, 4 insertions(+)

Index: linux-2.6.28-kbuild/scripts/config
===================================================================
--- linux-2.6.28-kbuild.orig/scripts/config	2009-01-02 02:56:55.000000000 +0100
+++ linux-2.6.28-kbuild/scripts/config	2009-01-07 22:17:40.000000000 +0100
@@ -60,6 +60,10 @@
 	FN=.config
 fi
 
+if [ "$1" = "" ] ; then
+	usage
+fi
+
 while [ "$1" != "" ] ; do
 	CMD="$1"
 	shift

-- 
ak@linux.intel.com

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

* Re: [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too
  2009-01-07 21:30     ` Andi Kleen
@ 2009-01-07 21:36       ` Sam Ravnborg
  0 siblings, 0 replies; 12+ messages in thread
From: Sam Ravnborg @ 2009-01-07 21:36 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kbuild, linux-kernel

On Wed, Jan 07, 2009 at 10:30:32PM +0100, Andi Kleen wrote:
> On Wed, Jan 07, 2009 at 09:27:12PM +0100, Sam Ravnborg wrote:
> > On Sat, Jan 03, 2009 at 03:21:43AM +0100, Andi Kleen wrote:
> > > 
> > > Several of the scripts in "scripts" are useful to operate on
> > > files in a separate objdir. Instead of always manually typing
> > > the path to the source dir create a convenient symlink to
> > > the source dir's script directory in the objdir too.
> > > 
> > > I named it bin because scripts was already used for the object
> > > files of scripts.
> > 
> > So you suggest we in the O=... case should have
> > a bin symlink to save you typing "source/sc<tab>
> 
> Yes.
> 
> > 
> > That does not justify another symlink in the output
> > directory.
> 
> Why not? They don't cost anything, do they? And
> convenience matters.

Different people have different needs.
The next guys needs Arch to point at source/arch/$ARCH
and so on.
If it is convinient for your workflow I suggest you to
create it yourself.

Doing stuff like this as part of the build is simply the wrong place to do it.

	Sam

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

* Re: [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line
  2009-01-07 21:33   ` Andi Kleen
@ 2009-01-07 22:07     ` Sam Ravnborg
  0 siblings, 0 replies; 12+ messages in thread
From: Sam Ravnborg @ 2009-01-07 22:07 UTC (permalink / raw)
  To: Andi Kleen; +Cc: linux-kbuild, linux-kernel

On Wed, Jan 07, 2009 at 10:33:15PM +0100, Andi Kleen wrote:
> > When I try to run the script with no arguments nothing happens!?!
> > 
> > I will merge as is but please followup with a patch so it prints out usage
> > in this situation.
> 
> Here's a patch 
> 
> -Andi
> 
> ---
> 
> Kbuild: print usage with no arguments in scripts/config
> 
> Requested by Sam.
> 
> Signed-off-by: Andi Kleen <ak@linux.intel.com>

Thanks,
added and pushes out to kbuild-fixes.git

	Sam

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

end of thread, other threads:[~2009-01-07 22:05 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-01-03  2:21 [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Andi Kleen
2009-01-03  2:21 ` [PATCH] [2/3] KBUILD: Add a symlink to the source for separate objdirs Andi Kleen
2009-01-07 20:29   ` Sam Ravnborg
2009-01-03  2:21 ` [PATCH] [3/3] KBUILD: Add a "bin" symlink for the scripts directory too Andi Kleen
2009-01-07 20:27   ` Sam Ravnborg
2009-01-07 21:30     ` Andi Kleen
2009-01-07 21:36       ` Sam Ravnborg
2009-01-03 10:54 ` [PATCH] [1/3] KBUILD: Add script to manipulate .config files on the command line Arnd Bergmann
2009-01-03 17:12   ` Andi Kleen
2009-01-07 20:18 ` Sam Ravnborg
2009-01-07 21:33   ` Andi Kleen
2009-01-07 22:07     ` Sam Ravnborg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.