]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
kconfig: fix whitespace handling bug of savedefconfig
authorMasahiro Yamada <yamada.m@jp.panasonic.com>
Wed, 3 Sep 2014 20:41:32 +0000 (05:41 +0900)
committerTom Rini <trini@ti.com>
Tue, 16 Sep 2014 16:23:58 +0000 (12:23 -0400)
Commit 3ff291f371fa9858426774f3732924bacb61ed1c
(kconfig: convert Kconfig helper script into a shell script)
introduced another regression.

Shell usually handles whitespaces as separators,
so "make saveconfig" outputs

  # CONFIG_FOO is not set

into:

  #
  CONFIG_FOO
  is
  not
  set

Whitespaces should not be treated as separators here.

Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
Acked-by: Simon Glass <sjg@chromium.org>
scripts/multiconfig.sh

index 785f5639a6961619b9005155d70a766caf5749a1..7606193102451a11f0906ae67993b54c1a8a3e52 100644 (file)
@@ -170,7 +170,7 @@ do_savedefconfig () {
        # backslashes as an escape character
        while read -r line
        do
-               output_lines="$output_lines $line"
+               output_lines="$output_lines%$line"
        done < defconfig
 
        for img in $subimages
@@ -185,43 +185,64 @@ do_savedefconfig () {
                        tmp=
                        match=
 
+                       # "# CONFIG_FOO is not set" should not be divided.
+                       # Use "%" as a separator, instead of a whitespace.
+                       # "%" is unlikely to appear in defconfig context.
+                       save_IFS=$IFS
+                       IFS=%
                        # coalesce common lines together
                        for i in $output_lines
                        do
                                case "$i" in
                                "[+A-Z]*:$line")
-                                       tmp="$tmp $unmatched"
+                                       tmp="$tmp%$unmatched"
                                        i=$(echo "$i" | \
                                            sed -e "s/^\([^:]\)*/\1$symbol/")
-                                       tmp="$tmp $i"
+                                       tmp="$tmp%$i"
                                        match=1
                                        ;;
                                "$line")
-                                       tmp="$tmp $unmatched"
-                                       tmp="$tmp +$symbol:$i"
+                                       tmp="$tmp%$unmatched"
+                                       tmp="$tmp%+$symbol:$i"
                                        match=1
                                        ;;
                                *)
-                                       tmp="$tmp $i"
+                                       tmp="$tmp%$i"
                                        ;;
                                esac
                        done
 
+                       # Restore the default separator for the outer for loop.
+                       IFS=$save_IFS
+
                        if [ "$match" ]; then
                                output_lines="$tmp"
                                unmatched=
                        else
-                               unmatched="$unmatched $symbol:$line"
+                               unmatched="$unmatched%$symbol:$line"
                        fi
                done < defconfig
        done
 
        rm -f defconfig
        touch defconfig
+
+       save_IFS=$IFS
+       IFS=%
+
        for line in $output_lines
        do
-               echo $line >> defconfig
+               case "$line" in
+               "")
+                       # do not output blank lines
+                       ;;
+               *)
+                       echo $line >> defconfig
+                       ;;
+               esac
        done
+
+       IFS=$save_IFS
 }
 
 # Usage: