Hi, On Wed, Sep 21, 2011 at 9:20 PM, Dmitry Fink (Palm GBU) <Dmitry.Fink@xxxxxxxx> 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@xxxxxxxxxx> 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@xxxxxxxxxxxx> >>CC: gthelen@xxxxxxxxxx >>CC: tartler@xxxxxxxxx >>CC: Dmitry Fink <Dmitry.Fink@xxxxxxxx> >>CC: Darren Hart <dvhart@xxxxxxxxxxxxxxx> >>CC: Eric B Munson <ebmunson@xxxxxxxxxx> >>CC: Bruce Ashfield <Bruce.Ashfield@xxxxxxxxxxxxx> >>CC: Michal Marek <mmarek@xxxxxxx> >>CC: linux-kbuild@xxxxxxxxxxxxxxx >>Signed-off-by: John Stultz <john.stultz@xxxxxxxxxx> >>--- >> 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@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html