[PATCH 2/2] kconfig: Add merge_config.sh script

From: John Stultz
Date: Fri Sep 16 2011 - 21:49:36 EST


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 utilizes olddefconfig to set any unspecified values
to their default, then finally checks to make sure no specified
value was dropped due to unsatisfied dependencies.

Thanks to Darren Hart for early review and feedback!

Please let me know if you have any comments or thoughts!

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 | 72 +++++++++++++++++++++++++++++++++++++++
1 files changed, 72 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..fa90e49
--- /dev/null
+++ b/scripts/kconfig/merge_config.sh
@@ -0,0 +1,72 @@
+#!/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
+
+
+# Copy the merged file to .config and run olddefconfig
+cp $TMP_FILE .config
+make olddefconfig > /dev/null
+
+
+# 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-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/