[RFC PATCH] scripts/setlocalversion: avoid keeping double-quotes in UBOOTRELEASE

Rasmus Villemoes rasmus.villemoes at prevas.dk
Tue Oct 27 11:30:06 CET 2020


CONFIG_LOCALVERSION is a string Kconfig item, so auto.conf always
contains a line of the form

CONFIG_LOCALVERSION="foo"

(usually with nothing between the quotes). Since 81630a3b (scripts:
setlocalversion: safely extract variables from auto.conf using awk),
those quotes are no longer automatically stripped as part of the
shell sourcing auto.conf, so they get included in the value of the
shell variable CONFIG_LOCALVERSION, which in turn then bleeds to the
output and to include/config/uboot.release, which contains

  2020.10"foo"-00879-gae4fdd7b04

They are still present in the value of the UBOOTRELEASE make
variable. When that variable is used to generate
version_autogenerated.h, we end up running the command

  echo \#define PLAIN_VERSION \"2020.10"foo"-00879-gae4fdd7b04\"

via the shell, and thus the quotes do finally get stripped via the
shell's rule for concatenating words (in essence, the evaluation by a
shell has been postponed till that point). However, UBOOTRELEASE is
also used in a few other places, e.g.

  -n "U-Boot $(UBOOTRELEASE) for $(BOARD) board"

so that expands to

  -n "U-Boot 2020.10"foo"-00879-gae4fdd7b04 for $(BOARD) board"

which (still) works, but mostly by chance.

To avoid those quotes from appearing in uboot.release and causing
confusion when one tries to debug things, and to get closer to how
Linux' setlocalversion works, while still avoiding evaluating the
lines that may contain $() constructs, grep for the few lines we're
interested in and eval those.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes at prevas.dk>
---

This is not really meant for applying, hence RFC. I hope to be able to
get U-Boot's and linux' copies completely in sync (since the last sync
a few weeks ago, 548b8b51 has landed in linux), so if this is ok in
principle, I'll try submitting the similar patch on the linux side,
and if that's accepted, we can do another sync after that.

 scripts/setlocalversion | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index c1c0435267..8484bea07f 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -151,10 +151,9 @@ fi
 
 if test -e include/config/auto.conf; then
 	# We are interested only in CONFIG_LOCALVERSION and
-	# CONFIG_LOCALVERSION_AUTO, so extract these in a safe
-	# way (i.e. w/o sourcing auto.conf)
-	CONFIG_LOCALVERSION=`cat include/config/auto.conf | awk -F '=' '/^CONFIG_LOCALVERSION=/ {print $2}'`
-	CONFIG_LOCALVERSION_AUTO=`cat include/config/auto.conf | awk -F '=' '/^CONFIG_LOCALVERSION_AUTO=/ {print $2}'`
+	# CONFIG_LOCALVERSION_AUTO, so avoid other lines that may have
+	# odd side effects when evaluated.
+	eval "$(grep -E '^CONFIG_LOCALVERSION(_AUTO)?=' include/config/auto.conf)"
 else
 	echo "Error: kernelrelease not valid - run 'make prepare' to update it" >&2
 	exit 1
-- 
2.23.0



More information about the U-Boot mailing list