* [PATCH] kconfig: Add merge_config.sh script
@ 2011-09-21 5:22 John Stultz
2011-09-21 6:44 ` Richard Cochran
` (4 more replies)
0 siblings, 5 replies; 14+ messages in thread
From: John Stultz @ 2011-09-21 5:22 UTC (permalink / raw)
To: lkml
Cc: John Stultz, Sam Ravnborg, gthelen, tartler, Dmitry Fink,
Darren Hart, Eric B Munson, Bruce Ashfield, Michal Marek,
linux-kbuild
After noticing almost every distro has their own method of managing
config fragments, I went looking at some best practices, and wanted
to try to consolidate some of the different approaches so this fairly
simple infrastructure can be shared (and new distros/build systems
don't have to implement yet another config fragment merge script).
This script is most influenced by the Windriver tools used in
the Yocto Project, reusing some portions found there.
This script merges multiple config fragments, warning on any
overrided values. It then sets any unspecified values to their
default, then finally checks to make sure no specified value was
dropped due to unsatisfied dependencies.
I'm sure I'm sure this implementation won't work for everyone, and
I expect it will need to evolve to adapt for various use cases.
But I think its a reasonable starting point.
v2: Reworked to use alldefconfig instead of the proposed
olddefconfig as suggested by Sam Ravnborg.
Thanks to Darren Hart for early review and feedback!
Please let me know if you have any comments or thoughts!
CC: Sam Ravnborg <sam@ravnborg.org>
CC: gthelen@google.com
CC: tartler@cs.fau.de
CC: Dmitry Fink <Dmitry.Fink@palm.com>
CC: Darren Hart <dvhart@linux.intel.com>
CC: Eric B Munson <ebmunson@us.ibm.com>
CC: Bruce Ashfield <Bruce.Ashfield@windriver.com>
CC: Michal Marek <mmarek@suse.cz>
CC: linux-kbuild@vger.kernel.org
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
scripts/kconfig/merge_config.sh | 71 +++++++++++++++++++++++++++++++++++++++
1 files changed, 71 insertions(+), 0 deletions(-)
create mode 100755 scripts/kconfig/merge_config.sh
diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
new file mode 100755
index 0000000..fda0139
--- /dev/null
+++ b/scripts/kconfig/merge_config.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+# merge_config.sh - Takes a list of config fragment values, and merges
+# them one by one. Provides warnings on overridden values, and specified
+# values that did not make it to the resulting .config file (due to missed
+# dependencies or config symbol removal).
+#
+# Portions reused from kconf_check and generate_cfg:
+# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
+# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
+#
+# Copyright (c) 2009-2010 Wind River Systems, Inc.
+# Copyright 2011 Linaro
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU General Public License for more details.
+
+MERGE_LIST=$*
+
+
+TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
+
+# Merge files, printing warnings on overrided values
+for MERGE_FILE in $MERGE_LIST ; do
+ echo "Merging $MERGE_FILE"
+ CFG_LIST=`cat $MERGE_FILE | \
+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
+ for CFG in $CFG_LIST ; do
+ grep -q -w $CFG $TMP_FILE
+ if [ $? == 0 ] ; then
+ PREV_VAL=`grep -w $CFG $TMP_FILE`
+ NEW_VAL=`grep -w $CFG $MERGE_FILE`
+ if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
+ echo Value of $CFG is redefined by fragment $MERGE_FILE:
+ echo Previous value: `grep -w $CFG $TMP_FILE`
+ echo New value: `grep -w $CFG $MERGE_FILE`
+ echo
+ fi
+ sed -i "/$CFG[ =]/d" $TMP_FILE
+ fi
+ done
+ cat $MERGE_FILE >> $TMP_FILE
+done
+
+
+# Use the merged file as the starting point for alldefconfig
+# (Fills in any missing symbols with Kconfig default)
+make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
+
+# Check all specified config values took (might have missed-dependency issues)
+cat $TMP_FILE | while read line; do
+ CFG=`echo $line | \
+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
+
+ REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
+ ACTUAL_VAL=`grep -w -e "$CFG" .config`
+ if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
+ echo "Value requested for $CFG not in final .config"
+ echo "Requested value: $REQUESTED_VAL"
+ echo "Actual value: $ACTUAL_VAL"
+ echo ""
+ fi
+done
+
+# Cleanup
+rm $TMP_FILE
--
1.7.3.2.146.gca209
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 5:22 [PATCH] kconfig: Add merge_config.sh script John Stultz
@ 2011-09-21 6:44 ` Richard Cochran
2011-09-21 15:18 ` John Stultz
2011-09-22 20:05 ` Sam Ravnborg
2011-09-21 12:10 ` Michal Marek
` (3 subsequent siblings)
4 siblings, 2 replies; 14+ messages in thread
From: Richard Cochran @ 2011-09-21 6:44 UTC (permalink / raw)
To: John Stultz
Cc: lkml, Sam Ravnborg, gthelen, tartler, Dmitry Fink, Darren Hart,
Eric B Munson, Bruce Ashfield, Michal Marek, linux-kbuild
On Tue, Sep 20, 2011 at 10:22:41PM -0700, John Stultz wrote:
> After noticing almost every distro has their own method of managing
> config fragments, I went looking at some best practices, and wanted
> to try to consolidate some of the different approaches so this fairly
> simple infrastructure can be shared (and new distros/build systems
> don't have to implement yet another config fragment merge script).
John,
I have been wanting to make or find a way to start with an allnoconfig
and enable a short list of config options (and the options that are
needed to allow them). I don't want the other defaults at all.
Can I use your script for this? If not, is there another way to go
about it?
Thanks,
Richard
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 5:22 [PATCH] kconfig: Add merge_config.sh script John Stultz
2011-09-21 6:44 ` Richard Cochran
@ 2011-09-21 12:10 ` Michal Marek
2011-09-21 15:36 ` John Stultz
2011-09-21 21:42 ` Dmitry Fink (Palm GBU)
` (2 subsequent siblings)
4 siblings, 1 reply; 14+ messages in thread
From: Michal Marek @ 2011-09-21 12:10 UTC (permalink / raw)
To: John Stultz
Cc: lkml, Sam Ravnborg, gthelen, tartler, Dmitry Fink, Darren Hart,
Eric B Munson, Bruce Ashfield, linux-kbuild
On 21.9.2011 07:22, John Stultz wrote:
> After noticing almost every distro has their own method of managing
> config fragments, I went looking at some best practices, and wanted
> to try to consolidate some of the different approaches so this fairly
> simple infrastructure can be shared (and new distros/build systems
> don't have to implement yet another config fragment merge script).
>
> This script is most influenced by the Windriver tools used in
> the Yocto Project, reusing some portions found there.
>
> This script merges multiple config fragments, warning on any
> overrided values. It then sets any unspecified values to their
> default, then finally checks to make sure no specified value was
> dropped due to unsatisfied dependencies.
>
> I'm sure I'm sure this implementation won't work for everyone, and
> I expect it will need to evolve to adapt for various use cases.
> But I think its a reasonable starting point.
>
> v2: Reworked to use alldefconfig instead of the proposed
> olddefconfig as suggested by Sam Ravnborg.
>
> Thanks to Darren Hart for early review and feedback!
>
> Please let me know if you have any comments or thoughts!
>
> CC: Sam Ravnborg <sam@ravnborg.org>
> CC: gthelen@google.com
> CC: tartler@cs.fau.de
> CC: Dmitry Fink <Dmitry.Fink@palm.com>
> CC: Darren Hart <dvhart@linux.intel.com>
> CC: Eric B Munson <ebmunson@us.ibm.com>
> CC: Bruce Ashfield <Bruce.Ashfield@windriver.com>
> CC: Michal Marek <mmarek@suse.cz>
> CC: linux-kbuild@vger.kernel.org
> Signed-off-by: John Stultz <john.stultz@linaro.org>
> ---
> scripts/kconfig/merge_config.sh | 71 +++++++++++++++++++++++++++++++++++++++
> 1 files changed, 71 insertions(+), 0 deletions(-)
> create mode 100755 scripts/kconfig/merge_config.sh
>
> diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
> new file mode 100755
> index 0000000..fda0139
> --- /dev/null
> +++ b/scripts/kconfig/merge_config.sh
> @@ -0,0 +1,71 @@
> +#!/bin/sh
> +# merge_config.sh - Takes a list of config fragment values, and merges
> +# them one by one. Provides warnings on overridden values, and specified
> +# values that did not make it to the resulting .config file (due to missed
> +# dependencies or config symbol removal).
> +#
> +# Portions reused from kconf_check and generate_cfg:
> +# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
> +# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
> +#
> +# Copyright (c) 2009-2010 Wind River Systems, Inc.
> +# Copyright 2011 Linaro
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License version 2 as
> +# published by the Free Software Foundation.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> +# See the GNU General Public License for more details.
> +
> +MERGE_LIST=$*
> +
> +
> +TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
> +
> +# Merge files, printing warnings on overrided values
> +for MERGE_FILE in $MERGE_LIST ; do
> + echo "Merging $MERGE_FILE"
> + CFG_LIST=`cat $MERGE_FILE | \
> + sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
> + for CFG in $CFG_LIST ; do
> + grep -q -w $CFG $TMP_FILE
> + if [ $? == 0 ] ; then
> + PREV_VAL=`grep -w $CFG $TMP_FILE`
> + NEW_VAL=`grep -w $CFG $MERGE_FILE`
> + if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
> + echo Value of $CFG is redefined by fragment $MERGE_FILE:
> + echo Previous value: `grep -w $CFG $TMP_FILE`
> + echo New value: `grep -w $CFG $MERGE_FILE`
kconfig already warns when a symbol appears multiple times in .config.
If really wanted, a verbose mode that show the previous and new value
could be added as well.
> + echo
> + fi
> + sed -i "/$CFG[ =]/d" $TMP_FILE
> + fi
> + done
> + cat $MERGE_FILE >> $TMP_FILE
> +done
> +
> +
> +# Use the merged file as the starting point for alldefconfig
> +# (Fills in any missing symbols with Kconfig default)
> +make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
> +
> +# Check all specified config values took (might have missed-dependency issues)
> +cat $TMP_FILE | while read line; do
> + CFG=`echo $line | \
> + sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
> +
> + REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
> + ACTUAL_VAL=`grep -w -e "$CFG" .config`
> + if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
> + echo "Value requested for $CFG not in final .config"
> + echo "Requested value: $REQUESTED_VAL"
> + echo "Actual value: $ACTUAL_VAL"
> + echo ""
This requested vs. actual diff would be nice to have in kconfig I think.
The the merge script could be reduced to a simple cat(1) invocation.
Michal
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 6:44 ` Richard Cochran
@ 2011-09-21 15:18 ` John Stultz
2011-09-21 15:28 ` Darren Hart
2011-09-22 20:05 ` Sam Ravnborg
1 sibling, 1 reply; 14+ messages in thread
From: John Stultz @ 2011-09-21 15:18 UTC (permalink / raw)
To: Richard Cochran
Cc: lkml, Sam Ravnborg, gthelen, tartler, Dmitry Fink, Darren Hart,
Eric B Munson, Bruce Ashfield, Michal Marek, linux-kbuild
On Wed, 2011-09-21 at 08:44 +0200, Richard Cochran wrote:
> On Tue, Sep 20, 2011 at 10:22:41PM -0700, John Stultz wrote:
> > After noticing almost every distro has their own method of managing
> > config fragments, I went looking at some best practices, and wanted
> > to try to consolidate some of the different approaches so this fairly
> > simple infrastructure can be shared (and new distros/build systems
> > don't have to implement yet another config fragment merge script).
>
> John,
>
> I have been wanting to make or find a way to start with an allnoconfig
> and enable a short list of config options (and the options that are
> needed to allow them). I don't want the other defaults at all.
"make oldnoconfig" provides something close to this, I think.
> Can I use your script for this? If not, is there another way to go
> about it?
I guess my script could take an option to use oldnoconfig instead of the
alldefconfig method.
thanks
-john
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 15:18 ` John Stultz
@ 2011-09-21 15:28 ` Darren Hart
0 siblings, 0 replies; 14+ messages in thread
From: Darren Hart @ 2011-09-21 15:28 UTC (permalink / raw)
To: John Stultz
Cc: Richard Cochran, lkml, Sam Ravnborg, gthelen, tartler,
Dmitry Fink, Eric B Munson, Bruce Ashfield, Michal Marek,
linux-kbuild
On 09/21/2011 08:18 AM, John Stultz wrote:
> On Wed, 2011-09-21 at 08:44 +0200, Richard Cochran wrote:
>> On Tue, Sep 20, 2011 at 10:22:41PM -0700, John Stultz wrote:
>>> After noticing almost every distro has their own method of managing
>>> config fragments, I went looking at some best practices, and wanted
>>> to try to consolidate some of the different approaches so this fairly
>>> simple infrastructure can be shared (and new distros/build systems
>>> don't have to implement yet another config fragment merge script).
>>
>> John,
>>
>> I have been wanting to make or find a way to start with an allnoconfig
>> and enable a short list of config options (and the options that are
>> needed to allow them). I don't want the other defaults at all.
>
> "make oldnoconfig" provides something close to this, I think.
>
>> Can I use your script for this? If not, is there another way to go
>> about it?
>
> I guess my script could take an option to use oldnoconfig instead of the
> alldefconfig method.
I had considered suggesting this as well. It would be useful for
assembling a bare minimum configuration.
--
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 12:10 ` Michal Marek
@ 2011-09-21 15:36 ` John Stultz
0 siblings, 0 replies; 14+ messages in thread
From: John Stultz @ 2011-09-21 15:36 UTC (permalink / raw)
To: Michal Marek
Cc: lkml, Sam Ravnborg, gthelen, tartler, Dmitry Fink, Darren Hart,
Eric B Munson, Bruce Ashfield, linux-kbuild
On Wed, 2011-09-21 at 14:10 +0200, Michal Marek wrote:
> On 21.9.2011 07:22, John Stultz wrote:
> > After noticing almost every distro has their own method of managing
> > config fragments, I went looking at some best practices, and wanted
> > to try to consolidate some of the different approaches so this fairly
> > simple infrastructure can be shared (and new distros/build systems
> > don't have to implement yet another config fragment merge script).
> >
> > This script is most influenced by the Windriver tools used in
> > the Yocto Project, reusing some portions found there.
> >
> > This script merges multiple config fragments, warning on any
> > overrided values. It then sets any unspecified values to their
> > default, then finally checks to make sure no specified value was
> > dropped due to unsatisfied dependencies.
> >
> > I'm sure I'm sure this implementation won't work for everyone, and
> > I expect it will need to evolve to adapt for various use cases.
> > But I think its a reasonable starting point.
> >
> > v2: Reworked to use alldefconfig instead of the proposed
> > olddefconfig as suggested by Sam Ravnborg.
> >
> > Thanks to Darren Hart for early review and feedback!
> >
> > Please let me know if you have any comments or thoughts!
> >
> > CC: Sam Ravnborg <sam@ravnborg.org>
> > CC: gthelen@google.com
> > CC: tartler@cs.fau.de
> > CC: Dmitry Fink <Dmitry.Fink@palm.com>
> > CC: Darren Hart <dvhart@linux.intel.com>
> > CC: Eric B Munson <ebmunson@us.ibm.com>
> > CC: Bruce Ashfield <Bruce.Ashfield@windriver.com>
> > CC: Michal Marek <mmarek@suse.cz>
> > CC: linux-kbuild@vger.kernel.org
> > Signed-off-by: John Stultz <john.stultz@linaro.org>
> > ---
> > scripts/kconfig/merge_config.sh | 71 +++++++++++++++++++++++++++++++++++++++
> > 1 files changed, 71 insertions(+), 0 deletions(-)
> > create mode 100755 scripts/kconfig/merge_config.sh
> >
> > diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
> > new file mode 100755
> > index 0000000..fda0139
> > --- /dev/null
> > +++ b/scripts/kconfig/merge_config.sh
> > @@ -0,0 +1,71 @@
> > +#!/bin/sh
> > +# merge_config.sh - Takes a list of config fragment values, and merges
> > +# them one by one. Provides warnings on overridden values, and specified
> > +# values that did not make it to the resulting .config file (due to missed
> > +# dependencies or config symbol removal).
> > +#
> > +# Portions reused from kconf_check and generate_cfg:
> > +# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
> > +# http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
> > +#
> > +# Copyright (c) 2009-2010 Wind River Systems, Inc.
> > +# Copyright 2011 Linaro
> > +#
> > +# This program is free software; you can redistribute it and/or modify
> > +# it under the terms of the GNU General Public License version 2 as
> > +# published by the Free Software Foundation.
> > +#
> > +# This program is distributed in the hope that it will be useful,
> > +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> > +# See the GNU General Public License for more details.
> > +
> > +MERGE_LIST=$*
> > +
> > +
> > +TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
> > +
> > +# Merge files, printing warnings on overrided values
> > +for MERGE_FILE in $MERGE_LIST ; do
> > + echo "Merging $MERGE_FILE"
> > + CFG_LIST=`cat $MERGE_FILE | \
> > + sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
> > + for CFG in $CFG_LIST ; do
> > + grep -q -w $CFG $TMP_FILE
> > + if [ $? == 0 ] ; then
> > + PREV_VAL=`grep -w $CFG $TMP_FILE`
> > + NEW_VAL=`grep -w $CFG $MERGE_FILE`
> > + if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
> > + echo Value of $CFG is redefined by fragment $MERGE_FILE:
> > + echo Previous value: `grep -w $CFG $TMP_FILE`
> > + echo New value: `grep -w $CFG $MERGE_FILE`
>
> kconfig already warns when a symbol appears multiple times in .config.
> If really wanted, a verbose mode that show the previous and new value
> could be added as well.
Indeed. Unfortunately the override messages at evaluation time becomes
less informative since it cannot detect from which of the fragments the
duplication/override came from.
> > +# Use the merged file as the starting point for alldefconfig
> > +# (Fills in any missing symbols with Kconfig default)
> > +make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
> > +
> > +# Check all specified config values took (might have missed-dependency issues)
> > +cat $TMP_FILE | while read line; do
> > + CFG=`echo $line | \
> > + sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
> > +
> > + REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
> > + ACTUAL_VAL=`grep -w -e "$CFG" .config`
> > + if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
> > + echo "Value requested for $CFG not in final .config"
> > + echo "Requested value: $REQUESTED_VAL"
> > + echo "Actual value: $ACTUAL_VAL"
> > + echo ""
>
> This requested vs. actual diff would be nice to have in kconfig I think.
> The the merge script could be reduced to a simple cat(1) invocation.
I actually started with a simple cat call, but that has limitations:
Specifically when checking what was requested and what took in
the .config, we don't want to flag explicitly overrided values (for
instance in file A: CONFIG_FOO=y, in file B:# CONFIG_FOO is not set, we
don't want to complain that CONFIG_FOO=y isn't set.) That's why we do
the de-duplication first, and then compare the deduplicated input with
the output.
thanks
-john
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 5:22 [PATCH] kconfig: Add merge_config.sh script John Stultz
2011-09-21 6:44 ` Richard Cochran
2011-09-21 12:10 ` Michal Marek
@ 2011-09-21 21:42 ` Dmitry Fink (Palm GBU)
2011-09-22 1:20 ` Dmitry Fink (Palm GBU)
2011-09-27 3:25 ` Darren Hart
4 siblings, 0 replies; 14+ messages in thread
From: Dmitry Fink (Palm GBU) @ 2011-09-21 21:42 UTC (permalink / raw)
To: John Stultz, lkml
Cc: Sam Ravnborg, gthelen@google.com, tartler@cs.fau.de, Darren Hart,
Eric B Munson, Bruce Ashfield, Michal Marek,
linux-kbuild@vger.kernel.org
Hi John,
I think you may want to apply the following fix:
--- a/scripts/kconfig/merge_config.sh
+++ b/scripts/kconfig/merge_config.sh
@@ -32,7 +32,7 @@ for MERGE_FILE in $MERGE_LIST ; do
sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
for CFG in $CFG_LIST ; do
grep -q -w $CFG $TMP_FILE
- if [ $? == 0 ] ; then
+ if [ $? -eq 0 ] ; then
or just change it single "=" sign, "==" seems to be a bashism and failed
on ubuntu's /bin/sh.
You also have a minor typo in the commit msg:)
"I'm sure I'm sure this implementation won't work for everyone, and"
^ ^
Regards,
Dmitry
On 9/20/11 10:22 PM, "John Stultz" <john.stultz@linaro.org> wrote:
>After noticing almost every distro has their own method of managing
>config fragments, I went looking at some best practices, and wanted
>to try to consolidate some of the different approaches so this fairly
>simple infrastructure can be shared (and new distros/build systems
>don't have to implement yet another config fragment merge script).
>
>This script is most influenced by the Windriver tools used in
>the Yocto Project, reusing some portions found there.
>
>This script merges multiple config fragments, warning on any
>overrided values. It then sets any unspecified values to their
>default, then finally checks to make sure no specified value was
>dropped due to unsatisfied dependencies.
>
>I'm sure I'm sure this implementation won't work for everyone, and
>I expect it will need to evolve to adapt for various use cases.
>But I think its a reasonable starting point.
>
>v2: Reworked to use alldefconfig instead of the proposed
>olddefconfig as suggested by Sam Ravnborg.
>
>Thanks to Darren Hart for early review and feedback!
>
>Please let me know if you have any comments or thoughts!
>
>CC: Sam Ravnborg <sam@ravnborg.org>
>CC: gthelen@google.com
>CC: tartler@cs.fau.de
>CC: Dmitry Fink <Dmitry.Fink@palm.com>
>CC: Darren Hart <dvhart@linux.intel.com>
>CC: Eric B Munson <ebmunson@us.ibm.com>
>CC: Bruce Ashfield <Bruce.Ashfield@windriver.com>
>CC: Michal Marek <mmarek@suse.cz>
>CC: linux-kbuild@vger.kernel.org
>Signed-off-by: John Stultz <john.stultz@linaro.org>
>---
> scripts/kconfig/merge_config.sh | 71
>+++++++++++++++++++++++++++++++++++++++
> 1 files changed, 71 insertions(+), 0 deletions(-)
> create mode 100755 scripts/kconfig/merge_config.sh
>
>diff --git a/scripts/kconfig/merge_config.sh
>b/scripts/kconfig/merge_config.sh
>new file mode 100755
>index 0000000..fda0139
>--- /dev/null
>+++ b/scripts/kconfig/merge_config.sh
>@@ -0,0 +1,71 @@
>+#!/bin/sh
>+# merge_config.sh - Takes a list of config fragment values, and merges
>+# them one by one. Provides warnings on overridden values, and specified
>+# values that did not make it to the resulting .config file (due to
>missed
>+# dependencies or config symbol removal).
>+#
>+# Portions reused from kconf_check and generate_cfg:
>+#
>http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kc
>onf_check
>+#
>http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/ge
>nerate_cfg
>+#
>+# Copyright (c) 2009-2010 Wind River Systems, Inc.
>+# Copyright 2011 Linaro
>+#
>+# This program is free software; you can redistribute it and/or modify
>+# it under the terms of the GNU General Public License version 2 as
>+# published by the Free Software Foundation.
>+#
>+# This program is distributed in the hope that it will be useful,
>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>+# See the GNU General Public License for more details.
>+
>+MERGE_LIST=$*
>+
>+
>+TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
>+
>+# Merge files, printing warnings on overrided values
>+for MERGE_FILE in $MERGE_LIST ; do
>+ echo "Merging $MERGE_FILE"
>+ CFG_LIST=`cat $MERGE_FILE | \
>+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
>+ for CFG in $CFG_LIST ; do
>+ grep -q -w $CFG $TMP_FILE
>+ if [ $? == 0 ] ; then
>+ PREV_VAL=`grep -w $CFG $TMP_FILE`
>+ NEW_VAL=`grep -w $CFG $MERGE_FILE`
>+ if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
>+ echo Value of $CFG is redefined by fragment $MERGE_FILE:
>+ echo Previous value: `grep -w $CFG $TMP_FILE`
>+ echo New value: `grep -w $CFG $MERGE_FILE`
>+ echo
>+ fi
>+ sed -i "/$CFG[ =]/d" $TMP_FILE
>+ fi
>+ done
>+ cat $MERGE_FILE >> $TMP_FILE
>+done
>+
>+
>+# Use the merged file as the starting point for alldefconfig
>+# (Fills in any missing symbols with Kconfig default)
>+make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
>+
>+# Check all specified config values took (might have missed-dependency
>issues)
>+cat $TMP_FILE | while read line; do
>+ CFG=`echo $line | \
>+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
>+
>+ REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
>+ ACTUAL_VAL=`grep -w -e "$CFG" .config`
>+ if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
>+ echo "Value requested for $CFG not in final .config"
>+ echo "Requested value: $REQUESTED_VAL"
>+ echo "Actual value: $ACTUAL_VAL"
>+ echo ""
>+ fi
>+done
>+
>+# Cleanup
>+rm $TMP_FILE
>--
>1.7.3.2.146.gca209
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 5:22 [PATCH] kconfig: Add merge_config.sh script John Stultz
` (2 preceding siblings ...)
2011-09-21 21:42 ` Dmitry Fink (Palm GBU)
@ 2011-09-22 1:20 ` Dmitry Fink (Palm GBU)
2011-09-22 16:18 ` Arnaud Lacombe
2011-09-27 3:25 ` Darren Hart
4 siblings, 1 reply; 14+ messages in thread
From: Dmitry Fink (Palm GBU) @ 2011-09-22 1:20 UTC (permalink / raw)
To: John Stultz, lkml
Cc: Sam Ravnborg, gthelen@google.com, tartler@cs.fau.de, Darren Hart,
Eric B Munson, Bruce Ashfield, Michal Marek,
linux-kbuild@vger.kernel.org
Hi, John
Here is another suggestion:
--- a/scripts/kconfig/merge_config.sh
+++ b/scripts/kconfig/merge_config.sh
@@ -28,11 +28,11 @@ TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
# Merge files, printing warnings on overrided values
for MERGE_FILE in $MERGE_LIST ; do
echo "Merging $MERGE_FILE"
- CFG_LIST=`cat $MERGE_FILE | \
+ CFG_LIST=`cat $MERGE_FILE | grep -e "CONFIG_[a-zA-Z0-9_]*" | \
sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
for CFG in $CFG_LIST ; do
grep -q -w $CFG $TMP_FILE
@@ -53,7 +53,7 @@ done
make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
# Check all specified config values took (might have missed-dependency
issues)
-cat $TMP_FILE | while read line; do
+cat $TMP_FILE | grep -e "CONFIG_[a-zA-Z0-9_]*" | while read line; do
CFG=`echo $line | \
sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
The original script chokes on fragments that include empty lines or section
comments (and think we do want them in fragments). There might be a nicer
way to
handle it, this is the quickest fix I found, feel free to consider a
different
approach.
Dmitry
On 9/20/11 10:22 PM, "John Stultz" <john.stultz@linaro.org> wrote:
>After noticing almost every distro has their own method of managing
>config fragments, I went looking at some best practices, and wanted
>to try to consolidate some of the different approaches so this fairly
>simple infrastructure can be shared (and new distros/build systems
>don't have to implement yet another config fragment merge script).
>
>This script is most influenced by the Windriver tools used in
>the Yocto Project, reusing some portions found there.
>
>This script merges multiple config fragments, warning on any
>overrided values. It then sets any unspecified values to their
>default, then finally checks to make sure no specified value was
>dropped due to unsatisfied dependencies.
>
>I'm sure I'm sure this implementation won't work for everyone, and
>I expect it will need to evolve to adapt for various use cases.
>But I think its a reasonable starting point.
>
>v2: Reworked to use alldefconfig instead of the proposed
>olddefconfig as suggested by Sam Ravnborg.
>
>Thanks to Darren Hart for early review and feedback!
>
>Please let me know if you have any comments or thoughts!
>
>CC: Sam Ravnborg <sam@ravnborg.org>
>CC: gthelen@google.com
>CC: tartler@cs.fau.de
>CC: Dmitry Fink <Dmitry.Fink@palm.com>
>CC: Darren Hart <dvhart@linux.intel.com>
>CC: Eric B Munson <ebmunson@us.ibm.com>
>CC: Bruce Ashfield <Bruce.Ashfield@windriver.com>
>CC: Michal Marek <mmarek@suse.cz>
>CC: linux-kbuild@vger.kernel.org
>Signed-off-by: John Stultz <john.stultz@linaro.org>
>---
> scripts/kconfig/merge_config.sh | 71
>+++++++++++++++++++++++++++++++++++++++
> 1 files changed, 71 insertions(+), 0 deletions(-)
> create mode 100755 scripts/kconfig/merge_config.sh
>
>diff --git a/scripts/kconfig/merge_config.sh
>b/scripts/kconfig/merge_config.sh
>new file mode 100755
>index 0000000..fda0139
>--- /dev/null
>+++ b/scripts/kconfig/merge_config.sh
>@@ -0,0 +1,71 @@
>+#!/bin/sh
>+# merge_config.sh - Takes a list of config fragment values, and merges
>+# them one by one. Provides warnings on overridden values, and specified
>+# values that did not make it to the resulting .config file (due to
>missed
>+# dependencies or config symbol removal).
>+#
>+# Portions reused from kconf_check and generate_cfg:
>+#
>http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kc
>onf_check
>+#
>http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/ge
>nerate_cfg
>+#
>+# Copyright (c) 2009-2010 Wind River Systems, Inc.
>+# Copyright 2011 Linaro
>+#
>+# This program is free software; you can redistribute it and/or modify
>+# it under the terms of the GNU General Public License version 2 as
>+# published by the Free Software Foundation.
>+#
>+# This program is distributed in the hope that it will be useful,
>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>+# See the GNU General Public License for more details.
>+
>+MERGE_LIST=$*
>+
>+
>+TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
>+
>+# Merge files, printing warnings on overrided values
>+for MERGE_FILE in $MERGE_LIST ; do
>+ echo "Merging $MERGE_FILE"
>+ CFG_LIST=`cat $MERGE_FILE | \
>+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
>+ for CFG in $CFG_LIST ; do
>+ grep -q -w $CFG $TMP_FILE
>+ if [ $? == 0 ] ; then
>+ PREV_VAL=`grep -w $CFG $TMP_FILE`
>+ NEW_VAL=`grep -w $CFG $MERGE_FILE`
>+ if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
>+ echo Value of $CFG is redefined by fragment $MERGE_FILE:
>+ echo Previous value: `grep -w $CFG $TMP_FILE`
>+ echo New value: `grep -w $CFG $MERGE_FILE`
>+ echo
>+ fi
>+ sed -i "/$CFG[ =]/d" $TMP_FILE
>+ fi
>+ done
>+ cat $MERGE_FILE >> $TMP_FILE
>+done
>+
>+
>+# Use the merged file as the starting point for alldefconfig
>+# (Fills in any missing symbols with Kconfig default)
>+make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
>+
>+# Check all specified config values took (might have missed-dependency
>issues)
>+cat $TMP_FILE | while read line; do
>+ CFG=`echo $line | \
>+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
>+
>+ REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
>+ ACTUAL_VAL=`grep -w -e "$CFG" .config`
>+ if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
>+ echo "Value requested for $CFG not in final .config"
>+ echo "Requested value: $REQUESTED_VAL"
>+ echo "Actual value: $ACTUAL_VAL"
>+ echo ""
>+ fi
>+done
>+
>+# Cleanup
>+rm $TMP_FILE
>--
>1.7.3.2.146.gca209
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-22 1:20 ` Dmitry Fink (Palm GBU)
@ 2011-09-22 16:18 ` Arnaud Lacombe
0 siblings, 0 replies; 14+ messages in thread
From: Arnaud Lacombe @ 2011-09-22 16:18 UTC (permalink / raw)
To: Dmitry Fink (Palm GBU)
Cc: John Stultz, lkml, Sam Ravnborg, gthelen@google.com,
tartler@cs.fau.de, Darren Hart, Eric B Munson, Bruce Ashfield,
Michal Marek, linux-kbuild@vger.kernel.org
Hi,
On Wed, Sep 21, 2011 at 9:20 PM, Dmitry Fink (Palm GBU)
<Dmitry.Fink@palm.com> wrote:
> Hi, John
> Here is another suggestion:
>
> --- a/scripts/kconfig/merge_config.sh
> +++ b/scripts/kconfig/merge_config.sh
> @@ -28,11 +28,11 @@ TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
> # Merge files, printing warnings on overrided values
> for MERGE_FILE in $MERGE_LIST ; do
> echo "Merging $MERGE_FILE"
> - CFG_LIST=`cat $MERGE_FILE | \
> + CFG_LIST=`cat $MERGE_FILE | grep -e "CONFIG_[a-zA-Z0-9_]*" | \
> sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
3 process, when only 1 is really needed, the following:
CFG_LIST=`sed '/CONFIG_[a-zA-Z0-9_]*/!d; s/^\(#
\)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/' $MERGE_FILE`
should do the job; however, it's completely untested.
- Arnaud
> for CFG in $CFG_LIST ; do
> grep -q -w $CFG $TMP_FILE
> @@ -53,7 +53,7 @@ done
> make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
>
> # Check all specified config values took (might have missed-dependency
> issues)
> -cat $TMP_FILE | while read line; do
> +cat $TMP_FILE | grep -e "CONFIG_[a-zA-Z0-9_]*" | while read line; do
> CFG=`echo $line | \
> sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
>
> The original script chokes on fragments that include empty lines or section
> comments (and think we do want them in fragments). There might be a nicer
> way to
> handle it, this is the quickest fix I found, feel free to consider a
> different
> approach.
>
> Dmitry
>
>
> On 9/20/11 10:22 PM, "John Stultz" <john.stultz@linaro.org> wrote:
>
>>After noticing almost every distro has their own method of managing
>>config fragments, I went looking at some best practices, and wanted
>>to try to consolidate some of the different approaches so this fairly
>>simple infrastructure can be shared (and new distros/build systems
>>don't have to implement yet another config fragment merge script).
>>
>>This script is most influenced by the Windriver tools used in
>>the Yocto Project, reusing some portions found there.
>>
>>This script merges multiple config fragments, warning on any
>>overrided values. It then sets any unspecified values to their
>>default, then finally checks to make sure no specified value was
>>dropped due to unsatisfied dependencies.
>>
>>I'm sure I'm sure this implementation won't work for everyone, and
>>I expect it will need to evolve to adapt for various use cases.
>>But I think its a reasonable starting point.
>>
>>v2: Reworked to use alldefconfig instead of the proposed
>>olddefconfig as suggested by Sam Ravnborg.
>>
>>Thanks to Darren Hart for early review and feedback!
>>
>>Please let me know if you have any comments or thoughts!
>>
>>CC: Sam Ravnborg <sam@ravnborg.org>
>>CC: gthelen@google.com
>>CC: tartler@cs.fau.de
>>CC: Dmitry Fink <Dmitry.Fink@palm.com>
>>CC: Darren Hart <dvhart@linux.intel.com>
>>CC: Eric B Munson <ebmunson@us.ibm.com>
>>CC: Bruce Ashfield <Bruce.Ashfield@windriver.com>
>>CC: Michal Marek <mmarek@suse.cz>
>>CC: linux-kbuild@vger.kernel.org
>>Signed-off-by: John Stultz <john.stultz@linaro.org>
>>---
>> scripts/kconfig/merge_config.sh | 71
>>+++++++++++++++++++++++++++++++++++++++
>> 1 files changed, 71 insertions(+), 0 deletions(-)
>> create mode 100755 scripts/kconfig/merge_config.sh
>>
>>diff --git a/scripts/kconfig/merge_config.sh
>>b/scripts/kconfig/merge_config.sh
>>new file mode 100755
>>index 0000000..fda0139
>>--- /dev/null
>>+++ b/scripts/kconfig/merge_config.sh
>>@@ -0,0 +1,71 @@
>>+#!/bin/sh
>>+# merge_config.sh - Takes a list of config fragment values, and merges
>>+# them one by one. Provides warnings on overridden values, and specified
>>+# values that did not make it to the resulting .config file (due to
>>missed
>>+# dependencies or config symbol removal).
>>+#
>>+# Portions reused from kconf_check and generate_cfg:
>>+#
>>http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kc
>>onf_check
>>+#
>>http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/ge
>>nerate_cfg
>>+#
>>+# Copyright (c) 2009-2010 Wind River Systems, Inc.
>>+# Copyright 2011 Linaro
>>+#
>>+# This program is free software; you can redistribute it and/or modify
>>+# it under the terms of the GNU General Public License version 2 as
>>+# published by the Free Software Foundation.
>>+#
>>+# This program is distributed in the hope that it will be useful,
>>+# but WITHOUT ANY WARRANTY; without even the implied warranty of
>>+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>>+# See the GNU General Public License for more details.
>>+
>>+MERGE_LIST=$*
>>+
>>+
>>+TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
>>+
>>+# Merge files, printing warnings on overrided values
>>+for MERGE_FILE in $MERGE_LIST ; do
>>+ echo "Merging $MERGE_FILE"
>>+ CFG_LIST=`cat $MERGE_FILE | \
>>+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
>>+ for CFG in $CFG_LIST ; do
>>+ grep -q -w $CFG $TMP_FILE
>>+ if [ $? == 0 ] ; then
>>+ PREV_VAL=`grep -w $CFG $TMP_FILE`
>>+ NEW_VAL=`grep -w $CFG $MERGE_FILE`
>>+ if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
>>+ echo Value of $CFG is redefined by fragment $MERGE_FILE:
>>+ echo Previous value: `grep -w $CFG $TMP_FILE`
>>+ echo New value: `grep -w $CFG $MERGE_FILE`
>>+ echo
>>+ fi
>>+ sed -i "/$CFG[ =]/d" $TMP_FILE
>>+ fi
>>+ done
>>+ cat $MERGE_FILE >> $TMP_FILE
>>+done
>>+
>>+
>>+# Use the merged file as the starting point for alldefconfig
>>+# (Fills in any missing symbols with Kconfig default)
>>+make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
>>+
>>+# Check all specified config values took (might have missed-dependency
>>issues)
>>+cat $TMP_FILE | while read line; do
>>+ CFG=`echo $line | \
>>+ sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
>>+
>>+ REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
>>+ ACTUAL_VAL=`grep -w -e "$CFG" .config`
>>+ if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
>>+ echo "Value requested for $CFG not in final .config"
>>+ echo "Requested value: $REQUESTED_VAL"
>>+ echo "Actual value: $ACTUAL_VAL"
>>+ echo ""
>>+ fi
>>+done
>>+
>>+# Cleanup
>>+rm $TMP_FILE
>>--
>>1.7.3.2.146.gca209
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH] kconfig: Add merge_config.sh script
2011-09-21 6:44 ` Richard Cochran
2011-09-21 15:18 ` John Stultz
@ 2011-09-22 20:05 ` Sam Ravnborg
1 sibling, 0 replies; 14+ messages in thread
From: Sam Ravnborg @ 2011-09-22 20:05 UTC (permalink / raw)
To: Richard Cochran
Cc: John Stultz, lkml, gthelen, tartler, Dmitry Fink, Darren Hart,
Eric B Munson, Bruce Ashfield, Michal Marek, linux-kbuild
On Wed, Sep 21, 2011 at 08:44:23AM +0200, Richard Cochran wrote:
> On Tue, Sep 20, 2011 at 10:22:41PM -0700, John Stultz wrote:
> > After noticing almost every distro has their own method of managing
> > config fragments, I went looking at some best practices, and wanted
> > to try to consolidate some of the different approaches so this fairly
> > simple infrastructure can be shared (and new distros/build systems
> > don't have to implement yet another config fragment merge script).
>
> John,
>
> I have been wanting to make or find a way to start with an allnoconfig
> and enable a short list of config options (and the options that are
> needed to allow them). I don't want the other defaults at all.
>From Documentation/kbuild/kconfig.txt:
===================================================================
This 'KCONFIG_ALLCONFIG' file is a config file which contains
(usually a subset of all) preset config symbols. These variable
settings are still subject to normal dependency checks.
Examples:
KCONFIG_ALLCONFIG=custom-notebook.config make allnoconfig
or
KCONFIG_ALLCONFIG=mini.config make allnoconfig
or
make KCONFIG_ALLCONFIG=mini.config allnoconfig
These examples will disable most options (allnoconfig) but enable or
disable the options that are explicitly listed in the specified
mini-config files.
===================================================================
I think this should do what you want.
Sam
^ permalink raw reply [flat|nested] 14+ messages in thread
* (no subject)
2011-09-21 5:22 [PATCH] kconfig: Add merge_config.sh script John Stultz
` (3 preceding siblings ...)
2011-09-22 1:20 ` Dmitry Fink (Palm GBU)
@ 2011-09-27 3:25 ` Darren Hart
2011-09-27 3:25 ` [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions Darren Hart
4 siblings, 1 reply; 14+ messages in thread
From: Darren Hart @ 2011-09-27 3:25 UTC (permalink / raw)
To: Linux Kernel Mailing List; +Cc: John Stultz
Hi John,
I ran into a couple issues dealing with comments in the config fragments and
clean-up after taking a signal. The following patches should address these.
I would still like an option to use allnoconfig for defining truly minimal
configs, but my patches aren't doing quite what I want, so these will have to
follow later. Hopefully tomorrow.
Thanks,
Darren
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions
2011-09-27 3:25 ` Darren Hart
@ 2011-09-27 3:25 ` Darren Hart
2011-09-27 3:25 ` [PATCH 2/2] merge_config.sh: trap signals and clean up Darren Hart
2011-09-27 3:30 ` [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions Darren Hart
0 siblings, 2 replies; 14+ messages in thread
From: Darren Hart @ 2011-09-27 3:25 UTC (permalink / raw)
To: Linux Kernel Mailing List; +Cc: John Stultz, Darren Hart, Dmitry Fink
The script picks up on comment lines and run into failed grep commands and
spew lots of warnings about "#" not being set and so forth.
sed will print non-matching lines without the -n option. Add -n and a p (print)
to each sed command. This will ensure only the CONFIG_* lines are used for
value comparison, and comment lines are ignored. # CONFIG_XYZ is not set are
still matched and not treated as comments. This addresses an issue Dmitry raised
without another pipe and call to grep.
Move the sed expression into a variable to avoid getting the regular expressions
in the two call sites out of sync.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
CC: Dmitry Fink <Dmitry.Fink@palm.com>
---
scripts/kconfig/merge_config.sh | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
index fda0139..a644724 100755
--- a/scripts/kconfig/merge_config.sh
+++ b/scripts/kconfig/merge_config.sh
@@ -25,11 +25,12 @@ MERGE_LIST=$*
TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
+SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
+
# Merge files, printing warnings on overrided values
for MERGE_FILE in $MERGE_LIST ; do
echo "Merging $MERGE_FILE"
- CFG_LIST=`cat $MERGE_FILE | \
- sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
+ CFG_LIST=`cat $MERGE_FILE | sed -n "$SED_CONFIG_EXP"`
for CFG in $CFG_LIST ; do
grep -q -w $CFG $TMP_FILE
if [ $? == 0 ] ; then
@@ -53,10 +54,7 @@ done
make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
# Check all specified config values took (might have missed-dependency issues)
-cat $TMP_FILE | while read line; do
- CFG=`echo $line | \
- sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
-
+for CFG in `sed -n "$SED_CONFIG_EXP" $TMP_FILE`; do
REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
ACTUAL_VAL=`grep -w -e "$CFG" .config`
if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
--
1.7.6.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/2] merge_config.sh: trap signals and clean up
2011-09-27 3:25 ` [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions Darren Hart
@ 2011-09-27 3:25 ` Darren Hart
2011-09-27 3:30 ` [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions Darren Hart
1 sibling, 0 replies; 14+ messages in thread
From: Darren Hart @ 2011-09-27 3:25 UTC (permalink / raw)
To: Linux Kernel Mailing List; +Cc: John Stultz, Darren Hart
The script creates a temp file, but doesn't ensure that it cleans up after
itself in the event of a signal.
Trap SIGHUP SIGINT and SIGTERM and remove the temp file.
Signed-off-by: Darren Hart <dvhart@linux.intel.com>
---
scripts/kconfig/merge_config.sh | 11 +++++++----
1 files changed, 7 insertions(+), 4 deletions(-)
diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
index a644724..a4b1bad 100755
--- a/scripts/kconfig/merge_config.sh
+++ b/scripts/kconfig/merge_config.sh
@@ -20,11 +20,15 @@
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU General Public License for more details.
-MERGE_LIST=$*
+clean_up() {
+ rm -f $TMP_FILE
+ exit
+}
+trap clean_up SIGHUP SIGINT SIGTERM
+MERGE_LIST=$*
TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
-
SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
# Merge files, printing warnings on overrided values
@@ -65,5 +69,4 @@ for CFG in `sed -n "$SED_CONFIG_EXP" $TMP_FILE`; do
fi
done
-# Cleanup
-rm $TMP_FILE
+clean_up
--
1.7.6.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions
2011-09-27 3:25 ` [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions Darren Hart
2011-09-27 3:25 ` [PATCH 2/2] merge_config.sh: trap signals and clean up Darren Hart
@ 2011-09-27 3:30 ` Darren Hart
1 sibling, 0 replies; 14+ messages in thread
From: Darren Hart @ 2011-09-27 3:30 UTC (permalink / raw)
To: Darren Hart; +Cc: Linux Kernel Mailing List, John Stultz, Dmitry Fink
On 09/26/2011 08:25 PM, Darren Hart wrote:
> The script picks up on comment lines and run into failed grep commands and
> spew lots of warnings about "#" not being set and so forth.
>
> sed will print non-matching lines without the -n option. Add -n and a p (print)
> to each sed command. This will ensure only the CONFIG_* lines are used for
> value comparison, and comment lines are ignored. # CONFIG_XYZ is not set are
> still matched and not treated as comments. This addresses an issue Dmitry raised
> without another pipe and call to grep.
>
> Move the sed expression into a variable to avoid getting the regular expressions
> in the two call sites out of sync.
>
> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
> CC: Dmitry Fink <Dmitry.Fink@palm.com>
> ---
> scripts/kconfig/merge_config.sh | 10 ++++------
> 1 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
> index fda0139..a644724 100755
> --- a/scripts/kconfig/merge_config.sh
> +++ b/scripts/kconfig/merge_config.sh
> @@ -25,11 +25,12 @@ MERGE_LIST=$*
>
> TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
>
> +SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
> +
> # Merge files, printing warnings on overrided values
> for MERGE_FILE in $MERGE_LIST ; do
> echo "Merging $MERGE_FILE"
> - CFG_LIST=`cat $MERGE_FILE | \
> - sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
> + CFG_LIST=`cat $MERGE_FILE | sed -n "$SED_CONFIG_EXP"`
Gah, and this doesn't need the cat either:
CFG_LIST=`sed -n "$SED_CONFIG_EXP" $MERGE_FILE`
--
Darren
> for CFG in $CFG_LIST ; do
> grep -q -w $CFG $TMP_FILE
> if [ $? == 0 ] ; then
> @@ -53,10 +54,7 @@ done
> make KCONFIG_ALLCONFIG=$TMP_FILE alldefconfig
>
> # Check all specified config values took (might have missed-dependency issues)
> -cat $TMP_FILE | while read line; do
> - CFG=`echo $line | \
> - sed 's/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/'`
> -
> +for CFG in `sed -n "$SED_CONFIG_EXP" $TMP_FILE`; do
> REQUESTED_VAL=`grep -w -e "$CFG" $TMP_FILE`
> ACTUAL_VAL=`grep -w -e "$CFG" .config`
> if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
--
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2011-09-27 3:30 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-21 5:22 [PATCH] kconfig: Add merge_config.sh script John Stultz
2011-09-21 6:44 ` Richard Cochran
2011-09-21 15:18 ` John Stultz
2011-09-21 15:28 ` Darren Hart
2011-09-22 20:05 ` Sam Ravnborg
2011-09-21 12:10 ` Michal Marek
2011-09-21 15:36 ` John Stultz
2011-09-21 21:42 ` Dmitry Fink (Palm GBU)
2011-09-22 1:20 ` Dmitry Fink (Palm GBU)
2011-09-22 16:18 ` Arnaud Lacombe
2011-09-27 3:25 ` Darren Hart
2011-09-27 3:25 ` [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions Darren Hart
2011-09-27 3:25 ` [PATCH 2/2] merge_config.sh: trap signals and clean up Darren Hart
2011-09-27 3:30 ` [PATCH 1/2] merge_config.sh: do not print non-matching lines in the sed expressions Darren Hart
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).