diff options
author | Anders Roxell <anders.roxell@linaro.org> | 2018-11-12 03:38:55 -0500 |
---|---|---|
committer | Masahiro Yamada <yamada.masahiro@socionext.com> | 2018-11-15 09:49:35 -0500 |
commit | a9b722847872d43595d072d7fd550f08fe6764fd (patch) | |
tree | 1a7efb7002ac8b4652f8b1061d65226b83d69716 /scripts/kconfig | |
parent | ccda4af0f4b92f7b4c308d3acc262f4a7e3affad (diff) |
scripts/kconfig/merge_config: don't redefine 'y' to 'm'
In today's merge_config.sh the order of the config fragment files dictates
the output of a config option. With this approach we will get different
.config files depending on the order of the config fragment files.
So doing something like:
$ ./merge/kconfig/merge_config.sh selftest.config drm.config
Where selftest.config defines DRM=y and drm.config defines DRM=m, the
result will be "DRM=m".
Rework to add a switch to get builtin '=y' precedence over modules '=m',
this will result in "DRM=y". If we do something like this:
$ ./merge/kconfig/merge_config.sh -y selftest.config drm.config
Suggested-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Anders Roxell <anders.roxell@linaro.org>
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Diffstat (limited to 'scripts/kconfig')
-rwxr-xr-x | scripts/kconfig/merge_config.sh | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh index 0ef906499646..9b89791b202c 100755 --- a/scripts/kconfig/merge_config.sh +++ b/scripts/kconfig/merge_config.sh | |||
@@ -22,6 +22,7 @@ | |||
22 | 22 | ||
23 | clean_up() { | 23 | clean_up() { |
24 | rm -f $TMP_FILE | 24 | rm -f $TMP_FILE |
25 | rm -f $MERGE_FILE | ||
25 | exit | 26 | exit |
26 | } | 27 | } |
27 | trap clean_up HUP INT TERM | 28 | trap clean_up HUP INT TERM |
@@ -32,6 +33,7 @@ usage() { | |||
32 | echo " -m only merge the fragments, do not execute the make command" | 33 | echo " -m only merge the fragments, do not execute the make command" |
33 | echo " -n use allnoconfig instead of alldefconfig" | 34 | echo " -n use allnoconfig instead of alldefconfig" |
34 | echo " -r list redundant entries when merging fragments" | 35 | echo " -r list redundant entries when merging fragments" |
36 | echo " -y make builtin have precedence over modules" | ||
35 | echo " -O dir to put generated output files. Consider setting \$KCONFIG_CONFIG instead." | 37 | echo " -O dir to put generated output files. Consider setting \$KCONFIG_CONFIG instead." |
36 | echo | 38 | echo |
37 | echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_ environment variable." | 39 | echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_ environment variable." |
@@ -40,6 +42,7 @@ usage() { | |||
40 | RUNMAKE=true | 42 | RUNMAKE=true |
41 | ALLTARGET=alldefconfig | 43 | ALLTARGET=alldefconfig |
42 | WARNREDUN=false | 44 | WARNREDUN=false |
45 | BUILTIN=false | ||
43 | OUTPUT=. | 46 | OUTPUT=. |
44 | CONFIG_PREFIX=${CONFIG_-CONFIG_} | 47 | CONFIG_PREFIX=${CONFIG_-CONFIG_} |
45 | 48 | ||
@@ -64,6 +67,11 @@ while true; do | |||
64 | shift | 67 | shift |
65 | continue | 68 | continue |
66 | ;; | 69 | ;; |
70 | "-y") | ||
71 | BUILTIN=true | ||
72 | shift | ||
73 | continue | ||
74 | ;; | ||
67 | "-O") | 75 | "-O") |
68 | if [ -d $2 ];then | 76 | if [ -d $2 ];then |
69 | OUTPUT=$(echo $2 | sed 's/\/*$//') | 77 | OUTPUT=$(echo $2 | sed 's/\/*$//') |
@@ -106,32 +114,45 @@ SED_CONFIG_EXP1="s/^\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)=.*/\1/p" | |||
106 | SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p" | 114 | SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p" |
107 | 115 | ||
108 | TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX) | 116 | TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX) |
117 | MERGE_FILE=$(mktemp ./.merge_tmp.config.XXXXXXXXXX) | ||
109 | 118 | ||
110 | echo "Using $INITFILE as base" | 119 | echo "Using $INITFILE as base" |
111 | cat $INITFILE > $TMP_FILE | 120 | cat $INITFILE > $TMP_FILE |
112 | 121 | ||
113 | # Merge files, printing warnings on overridden values | 122 | # Merge files, printing warnings on overridden values |
114 | for MERGE_FILE in $MERGE_LIST ; do | 123 | for ORIG_MERGE_FILE in $MERGE_LIST ; do |
115 | echo "Merging $MERGE_FILE" | 124 | echo "Merging $ORIG_MERGE_FILE" |
116 | if [ ! -r "$MERGE_FILE" ]; then | 125 | if [ ! -r "$ORIG_MERGE_FILE" ]; then |
117 | echo "The merge file '$MERGE_FILE' does not exist. Exit." >&2 | 126 | echo "The merge file '$ORIG_MERGE_FILE' does not exist. Exit." >&2 |
118 | exit 1 | 127 | exit 1 |
119 | fi | 128 | fi |
129 | cat $ORIG_MERGE_FILE > $MERGE_FILE | ||
120 | CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE) | 130 | CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE) |
121 | 131 | ||
122 | for CFG in $CFG_LIST ; do | 132 | for CFG in $CFG_LIST ; do |
123 | grep -q -w $CFG $TMP_FILE || continue | 133 | grep -q -w $CFG $TMP_FILE || continue |
124 | PREV_VAL=$(grep -w $CFG $TMP_FILE) | 134 | PREV_VAL=$(grep -w $CFG $TMP_FILE) |
125 | NEW_VAL=$(grep -w $CFG $MERGE_FILE) | 135 | NEW_VAL=$(grep -w $CFG $MERGE_FILE) |
126 | if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then | 136 | BUILTIN_FLAG=false |
127 | echo Value of $CFG is redefined by fragment $MERGE_FILE: | 137 | if [ "$BUILTIN" = "true" ] && [ "${NEW_VAL#CONFIG_*=}" = "m" ] && [ "${PREV_VAL#CONFIG_*=}" = "y" ]; then |
138 | echo Previous value: $PREV_VAL | ||
139 | echo New value: $NEW_VAL | ||
140 | echo -y passed, will not demote y to m | ||
141 | echo | ||
142 | BUILTIN_FLAG=true | ||
143 | elif [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then | ||
144 | echo Value of $CFG is redefined by fragment $ORIG_MERGE_FILE: | ||
128 | echo Previous value: $PREV_VAL | 145 | echo Previous value: $PREV_VAL |
129 | echo New value: $NEW_VAL | 146 | echo New value: $NEW_VAL |
130 | echo | 147 | echo |
131 | elif [ "$WARNREDUN" = "true" ]; then | 148 | elif [ "$WARNREDUN" = "true" ]; then |
132 | echo Value of $CFG is redundant by fragment $MERGE_FILE: | 149 | echo Value of $CFG is redundant by fragment $ORIG_MERGE_FILE: |
150 | fi | ||
151 | if [ "$BUILTIN_FLAG" = "false" ]; then | ||
152 | sed -i "/$CFG[ =]/d" $TMP_FILE | ||
153 | else | ||
154 | sed -i "/$CFG[ =]/d" $MERGE_FILE | ||
133 | fi | 155 | fi |
134 | sed -i "/$CFG[ =]/d" $TMP_FILE | ||
135 | done | 156 | done |
136 | cat $MERGE_FILE >> $TMP_FILE | 157 | cat $MERGE_FILE >> $TMP_FILE |
137 | done | 158 | done |