
From: Simon Glass sjg@chromium.org Date: Wed, 24 Nov 2021 07:40:14 -0700
GNU has a very useful third argument to match() but this is not supported in the POSIX awk.
Update the code to cope, so that the script is POSIX-compliant.
Signed-off-by: Simon Glass sjg@chromium.org
Changes in v4:
- Avoid using length() to access the length of the array
Changes in v3:
- Reword commit message and comment to avoid casting aspersions
Changes in v2:
- Fix the has_var match() that had left-over test code
scripts/env2string.awk | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-)
This makes the next branch build again for me on OpenBSD. So it would be great if this one could be applied somewhat promptly or at least before next is merged into master.
Thanks,
Mark
diff --git a/scripts/env2string.awk b/scripts/env2string.awk index 57d0fc8f3ba..1bfe9ed07a4 100644 --- a/scripts/env2string.awk +++ b/scripts/env2string.awk @@ -21,29 +21,39 @@ BEGIN {
# Skip empty lines, as these are generated by the clang preprocessor NF {
do_output = 0
# Quote quotes gsub(""", "\"")
# Avoid using the non-POSIX third parameter to match(), by splitting
# the work into several steps.
has_var = match($0, "^([^ \t=][^ =]*)=(.*)$")
# Is this the start of a new environment variable?
- if (match($0, "^([^ \t=][^ =]*)=(.*)$", arr)) {
- if (has_var) { if (length(env) != 0) { # Record the value of the variable now completed vars[var] = env
}do_output = 1
var = arr[1]
env = arr[2]
# Collect the variable name. The value follows the '='
match($0, "^([^ \t=][^ =]*)=")
var = substr($0, 1, RLENGTH - 1)
env = substr($0, RLENGTH + 1)
# Deal with += which concatenates the new string to the existing
# variable
if (length(env) != 0 && match(var, "^(.*)[+]$", var_arr))
{
# variable. Again we are careful to use POSIX match()
if (length(env) != 0 && match(var, "^(.*)[+]$")) {
plusname = substr(var, RSTART, RLENGTH - 1) # Allow var\+=val to indicate that the variable name is # var+ and this is not actually a concatenation
if (substr(var_arr[1], length(var_arr[1])) == "\\") {
if (substr(plusname, length(plusname)) == "\\") { # Drop the backslash sub(/\\[+]$/, "+", var) } else {
var = var_arr[1]
}var = plusname env = vars[var] env }
@@ -65,9 +75,10 @@ END { # empty it is not set. if (length(env) != 0) { vars[var] = env
}do_output = 1
- if (length(vars) != 0) {
if (do_output) { printf("%s", "#define CONFIG_EXTRA_ENV_TEXT "")
# Print out all the variables
-- 2.34.0.rc2.393.gf8c9666880-goog