Blame view
scripts/kconfig/merge_config.sh
3.75 KB
4b5f72145
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/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. clean_up() { |
c0c0cda27
|
24 25 |
rm -f $TMP_FILE exit |
4b5f72145
|
26 |
} |
041b78c89
|
27 |
trap clean_up HUP INT TERM |
4b5f72145
|
28 29 30 31 32 33 |
usage() { echo "Usage: $0 [OPTIONS] [CONFIG [...]]" echo " -h display this help text" echo " -m only merge the fragments, do not execute the make command" echo " -n use allnoconfig instead of alldefconfig" |
9875c42d6
|
34 |
echo " -r list redundant entries when merging fragments" |
409f117e2
|
35 |
echo " -O dir to put generated output files" |
4b5f72145
|
36 37 38 39 |
} MAKE=true ALLTARGET=alldefconfig |
9875c42d6
|
40 |
WARNREDUN=false |
409f117e2
|
41 |
OUTPUT=. |
4b5f72145
|
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
while true; do case $1 in "-n") ALLTARGET=allnoconfig shift continue ;; "-m") MAKE=false shift continue ;; "-h") usage exit ;; |
9875c42d6
|
59 60 61 62 63 |
"-r") WARNREDUN=true shift continue ;; |
409f117e2
|
64 65 66 67 68 69 70 71 72 73 |
"-O") if [ -d $2 ];then OUTPUT=$(echo $2 | sed 's/\/*$//') else echo "output directory $2 does not exist" 1>&2 exit 1 fi shift 2 continue ;; |
4b5f72145
|
74 75 76 77 78 |
*) break ;; esac done |
09280615a
|
79 80 |
INITFILE=$1 shift; |
4b5f72145
|
81 82 83 84 |
MERGE_LIST=$* SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p" TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX) |
09280615a
|
85 86 |
echo "Using $INITFILE as base" cat $INITFILE > $TMP_FILE |
4b5f72145
|
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# Merge files, printing warnings on overrided values for MERGE_FILE in $MERGE_LIST ; do echo "Merging $MERGE_FILE" CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE) for CFG in $CFG_LIST ; do grep -q -w $CFG $TMP_FILE if [ $? -eq 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: $PREV_VAL echo New value: $NEW_VAL echo |
9875c42d6
|
102 103 |
elif [ "$WARNREDUN" = "true" ]; then echo Value of $CFG is redundant by fragment $MERGE_FILE: |
4b5f72145
|
104 105 106 107 108 109 110 111 |
fi sed -i "/$CFG[ =]/d" $TMP_FILE fi done cat $MERGE_FILE >> $TMP_FILE done if [ "$MAKE" = "false" ]; then |
409f117e2
|
112 |
cp $TMP_FILE $OUTPUT/.config |
4b5f72145
|
113 |
echo "#" |
409f117e2
|
114 |
echo "# merged configuration written to $OUTPUT/.config (needs make)" |
4b5f72145
|
115 116 117 118 |
echo "#" clean_up exit fi |
a45c7dfb9
|
119 120 121 122 123 124 |
# If we have an output dir, setup the O= argument, otherwise leave # it blank, since O=. will create an unnecessary ./source softlink OUTPUT_ARG="" if [ "$OUTPUT" != "." ] ; then OUTPUT_ARG="O=$OUTPUT" fi |
4b5f72145
|
125 126 127 |
# Use the merged file as the starting point for: # alldefconfig: Fills in any missing symbols with Kconfig default # allnoconfig: Fills in any missing symbols with # CONFIG_* is not set |
a45c7dfb9
|
128 |
make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET |
4b5f72145
|
129 130 131 132 |
# Check all specified config values took (might have missed-dependency issues) for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do |
320d41bb1
|
133 |
REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE) |
409f117e2
|
134 |
ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config) |
4b5f72145
|
135 136 137 138 139 140 141 142 143 |
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 clean_up |