linux/scripts/kconfig/merge_config.sh
<<
>>
Prefs
   1#!/bin/sh
   2#  merge_config.sh - Takes a list of config fragment values, and merges
   3#  them one by one. Provides warnings on overridden values, and specified
   4#  values that did not make it to the resulting .config file (due to missed
   5#  dependencies or config symbol removal).
   6#
   7#  Portions reused from kconf_check and generate_cfg:
   8#  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
   9#  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
  10#
  11#  Copyright (c) 2009-2010 Wind River Systems, Inc.
  12#  Copyright 2011 Linaro
  13#
  14#  This program is free software; you can redistribute it and/or modify
  15#  it under the terms of the GNU General Public License version 2 as
  16#  published by the Free Software Foundation.
  17#
  18#  This program is distributed in the hope that it will be useful,
  19#  but WITHOUT ANY WARRANTY; without even the implied warranty of
  20#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  21#  See the GNU General Public License for more details.
  22
  23clean_up() {
  24        rm -f $TMP_FILE
  25        exit
  26}
  27trap clean_up HUP INT TERM
  28
  29usage() {
  30        echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
  31        echo "  -h    display this help text"
  32        echo "  -m    only merge the fragments, do not execute the make command"
  33        echo "  -n    use allnoconfig instead of alldefconfig"
  34        echo "  -r    list redundant entries when merging fragments"
  35}
  36
  37MAKE=true
  38ALLTARGET=alldefconfig
  39WARNREDUN=false
  40
  41while true; do
  42        case $1 in
  43        "-n")
  44                ALLTARGET=allnoconfig
  45                shift
  46                continue
  47                ;;
  48        "-m")
  49                MAKE=false
  50                shift
  51                continue
  52                ;;
  53        "-h")
  54                usage
  55                exit
  56                ;;
  57        "-r")
  58                WARNREDUN=true
  59                shift
  60                continue
  61                ;;
  62        *)
  63                break
  64                ;;
  65        esac
  66done
  67
  68INITFILE=$1
  69shift;
  70
  71MERGE_LIST=$*
  72SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
  73TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
  74
  75echo "Using $INITFILE as base"
  76cat $INITFILE > $TMP_FILE
  77
  78# Merge files, printing warnings on overrided values
  79for MERGE_FILE in $MERGE_LIST ; do
  80        echo "Merging $MERGE_FILE"
  81        CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
  82
  83        for CFG in $CFG_LIST ; do
  84                grep -q -w $CFG $TMP_FILE
  85                if [ $? -eq 0 ] ; then
  86                        PREV_VAL=$(grep -w $CFG $TMP_FILE)
  87                        NEW_VAL=$(grep -w $CFG $MERGE_FILE)
  88                        if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
  89                        echo Value of $CFG is redefined by fragment $MERGE_FILE:
  90                        echo Previous  value: $PREV_VAL
  91                        echo New value:       $NEW_VAL
  92                        echo
  93                        elif [ "$WARNREDUN" = "true" ]; then
  94                        echo Value of $CFG is redundant by fragment $MERGE_FILE:
  95                        fi
  96                        sed -i "/$CFG[ =]/d" $TMP_FILE
  97                fi
  98        done
  99        cat $MERGE_FILE >> $TMP_FILE
 100done
 101
 102if [ "$MAKE" = "false" ]; then
 103        cp $TMP_FILE .config
 104        echo "#"
 105        echo "# merged configuration written to .config (needs make)"
 106        echo "#"
 107        clean_up
 108        exit
 109fi
 110
 111# Use the merged file as the starting point for:
 112# alldefconfig: Fills in any missing symbols with Kconfig default
 113# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
 114make KCONFIG_ALLCONFIG=$TMP_FILE $ALLTARGET
 115
 116
 117# Check all specified config values took (might have missed-dependency issues)
 118for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
 119
 120        REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
 121        ACTUAL_VAL=$(grep -w -e "$CFG" .config)
 122        if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
 123                echo "Value requested for $CFG not in final .config"
 124                echo "Requested value:  $REQUESTED_VAL"
 125                echo "Actual value:     $ACTUAL_VAL"
 126                echo ""
 127        fi
 128done
 129
 130clean_up
 131
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.