scripts/kconfig/merge_config: don't redefine 'y' to 'm'
authorAnders Roxell <anders.roxell@linaro.org>
Mon, 12 Nov 2018 08:38:55 +0000 (09:38 +0100)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Thu, 15 Nov 2018 14:49:35 +0000 (23:49 +0900)
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>
scripts/kconfig/merge_config.sh

index 0ef906499646b57293bb85dea54234c601bfcafa..9b89791b202c323f5d1a1e82b01829f02a6956fd 100755 (executable)
@@ -22,6 +22,7 @@
 
 clean_up() {
        rm -f $TMP_FILE
+       rm -f $MERGE_FILE
        exit
 }
 trap clean_up HUP INT TERM
@@ -32,6 +33,7 @@ usage() {
        echo "  -m    only merge the fragments, do not execute the make command"
        echo "  -n    use allnoconfig instead of alldefconfig"
        echo "  -r    list redundant entries when merging fragments"
+       echo "  -y    make builtin have precedence over modules"
        echo "  -O    dir to put generated output files.  Consider setting \$KCONFIG_CONFIG instead."
        echo
        echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_ environment variable."
@@ -40,6 +42,7 @@ usage() {
 RUNMAKE=true
 ALLTARGET=alldefconfig
 WARNREDUN=false
+BUILTIN=false
 OUTPUT=.
 CONFIG_PREFIX=${CONFIG_-CONFIG_}
 
@@ -64,6 +67,11 @@ while true; do
                shift
                continue
                ;;
+       "-y")
+               BUILTIN=true
+               shift
+               continue
+               ;;
        "-O")
                if [ -d $2 ];then
                        OUTPUT=$(echo $2 | sed 's/\/*$//')
@@ -106,32 +114,45 @@ SED_CONFIG_EXP1="s/^\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)=.*/\1/p"
 SED_CONFIG_EXP2="s/^# \(${CONFIG_PREFIX}[a-zA-Z0-9_]*\) is not set$/\1/p"
 
 TMP_FILE=$(mktemp ./.tmp.config.XXXXXXXXXX)
+MERGE_FILE=$(mktemp ./.merge_tmp.config.XXXXXXXXXX)
 
 echo "Using $INITFILE as base"
 cat $INITFILE > $TMP_FILE
 
 # Merge files, printing warnings on overridden values
-for MERGE_FILE in $MERGE_LIST ; do
-       echo "Merging $MERGE_FILE"
-       if [ ! -r "$MERGE_FILE" ]; then
-               echo "The merge file '$MERGE_FILE' does not exist.  Exit." >&2
+for ORIG_MERGE_FILE in $MERGE_LIST ; do
+       echo "Merging $ORIG_MERGE_FILE"
+       if [ ! -r "$ORIG_MERGE_FILE" ]; then
+               echo "The merge file '$ORIG_MERGE_FILE' does not exist.  Exit." >&2
                exit 1
        fi
+       cat $ORIG_MERGE_FILE > $MERGE_FILE
        CFG_LIST=$(sed -n -e "$SED_CONFIG_EXP1" -e "$SED_CONFIG_EXP2" $MERGE_FILE)
 
        for CFG in $CFG_LIST ; do
                grep -q -w $CFG $TMP_FILE || continue
                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:
+               BUILTIN_FLAG=false
+               if [ "$BUILTIN" = "true" ] && [ "${NEW_VAL#CONFIG_*=}" = "m" ] && [ "${PREV_VAL#CONFIG_*=}" = "y" ]; then
+                       echo Previous  value: $PREV_VAL
+                       echo New value:       $NEW_VAL
+                       echo -y passed, will not demote y to m
+                       echo
+                       BUILTIN_FLAG=true
+               elif [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
+                       echo Value of $CFG is redefined by fragment $ORIG_MERGE_FILE:
                        echo Previous  value: $PREV_VAL
                        echo New value:       $NEW_VAL
                        echo
                elif [ "$WARNREDUN" = "true" ]; then
-                       echo Value of $CFG is redundant by fragment $MERGE_FILE:
+                       echo Value of $CFG is redundant by fragment $ORIG_MERGE_FILE:
+               fi
+               if [ "$BUILTIN_FLAG" = "false" ]; then
+                       sed -i "/$CFG[ =]/d" $TMP_FILE
+               else
+                       sed -i "/$CFG[ =]/d" $MERGE_FILE
                fi
-               sed -i "/$CFG[ =]/d" $TMP_FILE
        done
        cat $MERGE_FILE >> $TMP_FILE
 done