[v2] scripts/kconfig/merge_config: don't redefine 'y' to 'm'

Message ID 20181108194434.16568-1-anders.roxell@linaro.org
State New
Headers show
Series
  • [v2] scripts/kconfig/merge_config: don't redefine 'y' to 'm'
Related show

Commit Message

Anders Roxell Nov. 8, 2018, 7:44 p.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>

---
 scripts/kconfig/merge_config.sh | 34 +++++++++++++++++++++++++++------
 1 file changed, 28 insertions(+), 6 deletions(-)

-- 
2.19.1

Comments

Masahiro Yamada Nov. 11, 2018, 4:42 a.m. | #1
On Fri, Nov 9, 2018 at 4:45 AM Anders Roxell <anders.roxell@linaro.org> wrote:
>

> 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>

> ---

>  scripts/kconfig/merge_config.sh | 34 +++++++++++++++++++++++++++------

>  1 file changed, 28 insertions(+), 6 deletions(-)

>

> diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh

> index da66e7742282..fcd18f642fc7 100755

> --- a/scripts/kconfig/merge_config.sh

> +++ b/scripts/kconfig/merge_config.sh

> @@ -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,8 @@ usage() {

>  RUNMAKE=true

>  ALLTARGET=alldefconfig

>  WARNREDUN=false

> +BUILTIN=false

> +BUILTIN_FLAG=false



Could you move the initialization of BUILTIN_FLAG
into the inner for-loop ?



>  OUTPUT=.

>  CONFIG_PREFIX=${CONFIG_-CONFIG_}

>

> @@ -64,6 +68,11 @@ while true; do

>                 shift

>                 continue

>                 ;;

> +       "-y")

> +               BUILTIN=true

> +               shift

> +               continue

> +               ;;

>         "-O")

>                 if [ -d $2 ];then

>                         OUTPUT=$(echo $2 | sed 's/\/*$//')

> @@ -105,13 +114,15 @@ MERGE_LIST=$*

>  SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)[= ].*/\2/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"

> +for ORIG_MERGE_FILE in $MERGE_LIST ; do

> +       cat $ORIG_MERGE_FILE > $MERGE_FILE



This 'cat' should be moved after the check
of the presence of '$ORIG_MERGE_FILE'.


> +       echo "Merging $ORIG_MERGE_FILE"

>         if [ ! -r "$MERGE_FILE" ]; then


This check always returns false now.


>                 echo "The merge file '$MERGE_FILE' does not exist.  Exit." >&2

>                 exit 1

> @@ -122,15 +133,26 @@ for MERGE_FILE in $MERGE_LIST ; do

>                 grep -q -w $CFG $TMP_FILE || continue

>                 PREV_VAL=$(grep -w $CFG $TMP_FILE)

>                 NEW_VAL=$(grep -w $CFG $MERGE_FILE)


Could you add 'BUILTIN_FLAG=false' here?



> -               if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then

> -                       echo Value of $CFG is redefined by fragment $MERGE_FILE:

> +               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

> +                       BUILTIN_FLAG=false



Then this 'BUILTIN_FLAG=false' can go away.

Thanks.


>                 fi

> -               sed -i "/$CFG[ =]/d" $TMP_FILE

>         done

>         cat $MERGE_FILE >> $TMP_FILE

>  done

> --

> 2.19.1

>



-- 
Best Regards
Masahiro Yamada
Anders Roxell Nov. 12, 2018, 8:37 a.m. | #2
On Sun, 11 Nov 2018 at 05:43, Masahiro Yamada
<yamada.masahiro@socionext.com> wrote:
>

> On Fri, Nov 9, 2018 at 4:45 AM Anders Roxell <anders.roxell@linaro.org> wrote:

> >

> > 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>

> > ---

> >  scripts/kconfig/merge_config.sh | 34 +++++++++++++++++++++++++++------

> >  1 file changed, 28 insertions(+), 6 deletions(-)

> >

> > diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh

> > index da66e7742282..fcd18f642fc7 100755

> > --- a/scripts/kconfig/merge_config.sh

> > +++ b/scripts/kconfig/merge_config.sh

> > @@ -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,8 @@ usage() {

> >  RUNMAKE=true

> >  ALLTARGET=alldefconfig

> >  WARNREDUN=false

> > +BUILTIN=false

> > +BUILTIN_FLAG=false

>

>

> Could you move the initialization of BUILTIN_FLAG

> into the inner for-loop ?

>

>

>

> >  OUTPUT=.

> >  CONFIG_PREFIX=${CONFIG_-CONFIG_}

> >

> > @@ -64,6 +68,11 @@ while true; do

> >                 shift

> >                 continue

> >                 ;;

> > +       "-y")

> > +               BUILTIN=true

> > +               shift

> > +               continue

> > +               ;;

> >         "-O")

> >                 if [ -d $2 ];then

> >                         OUTPUT=$(echo $2 | sed 's/\/*$//')

> > @@ -105,13 +114,15 @@ MERGE_LIST=$*

> >  SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)[= ].*/\2/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"

> > +for ORIG_MERGE_FILE in $MERGE_LIST ; do

> > +       cat $ORIG_MERGE_FILE > $MERGE_FILE

>

>

> This 'cat' should be moved after the check

> of the presence of '$ORIG_MERGE_FILE'.

>

>

> > +       echo "Merging $ORIG_MERGE_FILE"

> >         if [ ! -r "$MERGE_FILE" ]; then

>

> This check always returns false now.

>

>

> >                 echo "The merge file '$MERGE_FILE' does not exist.  Exit." >&2

> >                 exit 1

> > @@ -122,15 +133,26 @@ for MERGE_FILE in $MERGE_LIST ; do

> >                 grep -q -w $CFG $TMP_FILE || continue

> >                 PREV_VAL=$(grep -w $CFG $TMP_FILE)

> >                 NEW_VAL=$(grep -w $CFG $MERGE_FILE)

>

> Could you add 'BUILTIN_FLAG=false' here?

>

>

>

> > -               if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then

> > -                       echo Value of $CFG is redefined by fragment $MERGE_FILE:

> > +               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

> > +                       BUILTIN_FLAG=false

>

>

> Then this 'BUILTIN_FLAG=false' can go away.


Thank you Masahiro, will send out an update shortly where I address
all your comments.

Cheers,
Anders

>

> Thanks.

>

>

> >                 fi

> > -               sed -i "/$CFG[ =]/d" $TMP_FILE

> >         done

> >         cat $MERGE_FILE >> $TMP_FILE

> >  done

> > --

> > 2.19.1

> >

>

>

> --

> Best Regards

> Masahiro Yamada

Patch

diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
index da66e7742282..fcd18f642fc7 100755
--- a/scripts/kconfig/merge_config.sh
+++ b/scripts/kconfig/merge_config.sh
@@ -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,8 @@  usage() {
 RUNMAKE=true
 ALLTARGET=alldefconfig
 WARNREDUN=false
+BUILTIN=false
+BUILTIN_FLAG=false
 OUTPUT=.
 CONFIG_PREFIX=${CONFIG_-CONFIG_}
 
@@ -64,6 +68,11 @@  while true; do
 		shift
 		continue
 		;;
+	"-y")
+		BUILTIN=true
+		shift
+		continue
+		;;
 	"-O")
 		if [ -d $2 ];then
 			OUTPUT=$(echo $2 | sed 's/\/*$//')
@@ -105,13 +114,15 @@  MERGE_LIST=$*
 SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(${CONFIG_PREFIX}[a-zA-Z0-9_]*\)[= ].*/\2/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"
+for ORIG_MERGE_FILE in $MERGE_LIST ; do
+	cat $ORIG_MERGE_FILE > $MERGE_FILE
+	echo "Merging $ORIG_MERGE_FILE"
 	if [ ! -r "$MERGE_FILE" ]; then
 		echo "The merge file '$MERGE_FILE' does not exist.  Exit." >&2
 		exit 1
@@ -122,15 +133,26 @@  for MERGE_FILE in $MERGE_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:
+		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
+			BUILTIN_FLAG=false
 		fi
-		sed -i "/$CFG[ =]/d" $TMP_FILE
 	done
 	cat $MERGE_FILE >> $TMP_FILE
 done