From patchwork Sat Sep 17 01:49:19 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Stultz X-Patchwork-Id: 4152 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id ADA9F23EF5 for ; Sat, 17 Sep 2011 01:49:32 +0000 (UTC) Received: from mail-fx0-f52.google.com (mail-fx0-f52.google.com [209.85.161.52]) by fiordland.canonical.com (Postfix) with ESMTP id A255BA18068 for ; Sat, 17 Sep 2011 01:49:32 +0000 (UTC) Received: by mail-fx0-f52.google.com with SMTP id 23so3223336fxe.11 for ; Fri, 16 Sep 2011 18:49:32 -0700 (PDT) Received: by 10.223.34.143 with SMTP id l15mr193245fad.46.1316224172276; Fri, 16 Sep 2011 18:49:32 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.152.11.8 with SMTP id m8cs148336lab; Fri, 16 Sep 2011 18:49:32 -0700 (PDT) Received: by 10.150.69.18 with SMTP id r18mr50498yba.438.1316224170126; Fri, 16 Sep 2011 18:49:30 -0700 (PDT) Received: from e2.ny.us.ibm.com (e2.ny.us.ibm.com. [32.97.182.142]) by mx.google.com with ESMTPS id e5si1611304ybe.19.2011.09.16.18.49.29 (version=TLSv1/SSLv3 cipher=OTHER); Fri, 16 Sep 2011 18:49:30 -0700 (PDT) Received-SPF: pass (google.com: domain of jstultz@us.ibm.com designates 32.97.182.142 as permitted sender) client-ip=32.97.182.142; Authentication-Results: mx.google.com; spf=pass (google.com: domain of jstultz@us.ibm.com designates 32.97.182.142 as permitted sender) smtp.mail=jstultz@us.ibm.com Received: from /spool/local by us.ibm.com with XMail ESMTP for from ; Fri, 16 Sep 2011 21:49:29 -0400 Received: from d01relay01.pok.ibm.com ([9.56.227.233]) by us.ibm.com ([192.168.1.102]) with XMail ESMTP; Fri, 16 Sep 2011 21:49:26 -0400 Received: from d01av03.pok.ibm.com (d01av03.pok.ibm.com [9.56.224.217]) by d01relay01.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p8H1nPB7253982; Fri, 16 Sep 2011 21:49:26 -0400 Received: from d01av03.pok.ibm.com (loopback [127.0.0.1]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p8GLnCfR020980; Fri, 16 Sep 2011 18:49:12 -0300 Received: from kernel.beaverton.ibm.com ([9.47.67.96]) by d01av03.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p8GLnBep020968; Fri, 16 Sep 2011 18:49:12 -0300 Received: by kernel.beaverton.ibm.com (Postfix, from userid 1056) id 9F94F1E7511; Fri, 16 Sep 2011 18:49:24 -0700 (PDT) From: John Stultz To: lkml Cc: John Stultz , gthelen@google.com, tartler@cs.fau.de, Dmitry Fink , Darren Hart , Eric B Munson , Bruce Ashfield , Michal Marek , linux-kbuild@vger.kernel.org Subject: [PATCH 2/2] kconfig: Add merge_config.sh script Date: Fri, 16 Sep 2011 18:49:19 -0700 Message-Id: <1316224159-3556-3-git-send-email-john.stultz@linaro.org> X-Mailer: git-send-email 1.7.3.2.146.gca209 In-Reply-To: <1316224159-3556-1-git-send-email-john.stultz@linaro.org> References: <1316224159-3556-1-git-send-email-john.stultz@linaro.org> x-cbid: 11091701-5112-0000-0000-00000066EE46 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@google.com CC: tartler@cs.fau.de CC: Dmitry Fink CC: Darren Hart CC: Eric B Munson CC: Bruce Ashfield CC: Michal Marek CC: linux-kbuild@vger.kernel.org Signed-off-by: John Stultz --- 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