Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make make(1): add debug logging for Var_Parse
details: https://anonhg.NetBSD.org/src/rev/6bffa7e0c92c
branches: trunk
changeset: 974683:6bffa7e0c92c
user: rillig <rillig%NetBSD.org@localhost>
date: Sat Aug 08 18:50:11 2020 +0000
description:
make(1): add debug logging for Var_Parse
This will hopefully help with tracking down why the "Undefined variable"
error message is not triggered.
There is some other non-obvious behavior nearby. In Parse_DoVar, the !=
assignment operator evaluates the variable using VARE_UNDEFERR, but
there is not even a warning for the following line:
!= echo err ${UNDEFINED} 1>&2
diffstat:
usr.bin/make/unit-tests/counter.exp | 23 +++++++++++++++++++++++
usr.bin/make/unit-tests/vardebug.exp | 12 ++++++++++++
usr.bin/make/var.c | 11 ++++++++---
3 files changed, 43 insertions(+), 3 deletions(-)
diffs (204 lines):
diff -r bedf8e0cb76b -r 6bffa7e0c92c usr.bin/make/unit-tests/counter.exp
--- a/usr.bin/make/unit-tests/counter.exp Sat Aug 08 17:03:04 2020 +0000
+++ b/usr.bin/make/unit-tests/counter.exp Sat Aug 08 18:50:11 2020 +0000
@@ -2,28 +2,43 @@
Global:COUNTER =
Global:NEXT = ${COUNTER::=${COUNTER} a}${COUNTER:[#]}
Global:A =
+Var_Parse: ${NEXT} with VARE_WANTRES|VARE_ASSIGN
+Var_Parse: ${COUNTER::=${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
Applying ${COUNTER::...} to "" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
+Var_Parse: ${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES
Modifier part: " a"
Global:COUNTER = a
Result of ${COUNTER::=${COUNTER} a} is "" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
+Var_Parse: ${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
+Var_Parse: ${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
Applying ${COUNTER:[...} to " a" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
Modifier part: "#"
Result of ${COUNTER:[#]} is "1" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
Global:A = ${COUNTER::= a a}1
Global:B =
+Var_Parse: ${NEXT} with VARE_WANTRES|VARE_ASSIGN
+Var_Parse: ${COUNTER::=${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
Applying ${COUNTER::...} to " a" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
+Var_Parse: ${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES
Modifier part: " a a"
Global:COUNTER = a a
Result of ${COUNTER::=${COUNTER} a} is "" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
+Var_Parse: ${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
+Var_Parse: ${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
Applying ${COUNTER:[...} to " a a" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
Modifier part: "#"
Result of ${COUNTER:[#]} is "2" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
Global:B = ${COUNTER::= a a a}2
Global:C =
+Var_Parse: ${NEXT} with VARE_WANTRES|VARE_ASSIGN
+Var_Parse: ${COUNTER::=${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
Applying ${COUNTER::...} to " a a" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
+Var_Parse: ${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES
Modifier part: " a a a"
Global:COUNTER = a a a
Result of ${COUNTER::=${COUNTER} a} is "" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
+Var_Parse: ${COUNTER} a}${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
+Var_Parse: ${COUNTER:[#]} with VARE_WANTRES|VARE_ASSIGN
Applying ${COUNTER:[...} to " a a a" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
Modifier part: "#"
Result of ${COUNTER:[#]} is "3" (eflags = VARE_WANTRES|VARE_ASSIGN, vflags = none)
@@ -31,6 +46,8 @@
Global:RELEVANT = no
Global:RELEVANT = yes (run-time part)
Result of ${RELEVANT::=yes (run-time part)} is "" (eflags = VARE_WANTRES, vflags = none)
+Var_Parse: ${A:Q} B=${B:Q} C=${C:Q} COUNTER=${COUNTER:[#]:Q} with VARE_WANTRES
+Var_Parse: ${COUNTER::= a a}1 with VARE_WANTRES
Applying ${COUNTER::...} to " a a a" (eflags = VARE_WANTRES, vflags = none)
Modifier part: " a a"
Global:COUNTER = a a
@@ -38,6 +55,8 @@
Applying ${A:Q} to "1" (eflags = VARE_WANTRES, vflags = none)
QuoteMeta: [1]
Result of ${A:Q} is "1" (eflags = VARE_WANTRES, vflags = none)
+Var_Parse: ${B:Q} C=${C:Q} COUNTER=${COUNTER:[#]:Q} with VARE_WANTRES
+Var_Parse: ${COUNTER::= a a a}2 with VARE_WANTRES
Applying ${COUNTER::...} to " a a" (eflags = VARE_WANTRES, vflags = none)
Modifier part: " a a a"
Global:COUNTER = a a a
@@ -45,6 +64,8 @@
Applying ${B:Q} to "2" (eflags = VARE_WANTRES, vflags = none)
QuoteMeta: [2]
Result of ${B:Q} is "2" (eflags = VARE_WANTRES, vflags = none)
+Var_Parse: ${C:Q} COUNTER=${COUNTER:[#]:Q} with VARE_WANTRES
+Var_Parse: ${COUNTER::= a a a a}3 with VARE_WANTRES
Applying ${COUNTER::...} to " a a a" (eflags = VARE_WANTRES, vflags = none)
Modifier part: " a a a a"
Global:COUNTER = a a a a
@@ -52,6 +73,7 @@
Applying ${C:Q} to "3" (eflags = VARE_WANTRES, vflags = none)
QuoteMeta: [3]
Result of ${C:Q} is "3" (eflags = VARE_WANTRES, vflags = none)
+Var_Parse: ${COUNTER:[#]:Q} with VARE_WANTRES
Applying ${COUNTER:[...} to " a a a a" (eflags = VARE_WANTRES, vflags = none)
Modifier part: "#"
Result of ${COUNTER:[#]} is "4" (eflags = VARE_WANTRES, vflags = none)
@@ -59,6 +81,7 @@
QuoteMeta: [4]
Result of ${COUNTER:Q} is "4" (eflags = VARE_WANTRES, vflags = none)
A=1 B=2 C=3 COUNTER=4
+Var_Parse: ${RELEVANT::=no} with VARE_WANTRES
Applying ${RELEVANT::...} to "yes (run-time part)" (eflags = VARE_WANTRES, vflags = none)
Modifier part: "no"
Global:RELEVANT = no
diff -r bedf8e0cb76b -r 6bffa7e0c92c usr.bin/make/unit-tests/vardebug.exp
--- a/usr.bin/make/unit-tests/vardebug.exp Sat Aug 08 17:03:04 2020 +0000
+++ b/usr.bin/make/unit-tests/vardebug.exp Sat Aug 08 18:50:11 2020 +0000
@@ -3,9 +3,11 @@
Global:VAR = overwritten
Global:delete VAR
Global:delete VAR (not found)
+Var_Parse: ${:U} with VARE_WANTRES
Applying ${:U} to "" (eflags = VARE_WANTRES, vflags = VAR_JUNK)
Result of ${:U} is "" (eflags = VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
Var_Set("${:U}", "empty name", ...) name expands to empty string - ignored
+Var_Parse: ${:U} with VARE_WANTRES
Applying ${:U} to "" (eflags = VARE_WANTRES, vflags = VAR_JUNK)
Result of ${:U} is "" (eflags = VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
Var_Append("${:U}", "empty name", ...) name expands to empty string - ignored
@@ -13,6 +15,7 @@
Global:VAR = 1
Global:VAR = 1 2
Global:VAR = 1 2 3
+Var_Parse: ${VAR:M[2]} with VARE_UNDEFERR|VARE_WANTRES
Applying ${VAR:M...} to "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
Pattern[VAR] for [1 2 3] is [[2]]
ModifyWords: split "1 2 3" into 3 words
@@ -20,18 +23,22 @@
VarMatch [2] [[2]]
VarMatch [3] [[2]]
Result of ${VAR:M[2]} is "2" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
+Var_Parse: ${VAR:N[2]} with VARE_UNDEFERR|VARE_WANTRES
Applying ${VAR:N...} to "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
Pattern[VAR] for [1 2 3] is [[2]]
ModifyWords: split "1 2 3" into 3 words
Result of ${VAR:N[2]} is "1 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
+Var_Parse: ${VAR:S,2,two,} with VARE_UNDEFERR|VARE_WANTRES
Applying ${VAR:S...} to "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
Modifier part: "2"
Modifier part: "two"
ModifyWords: split "1 2 3" into 3 words
Result of ${VAR:S,2,two,} is "1 two 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
+Var_Parse: ${VAR:Q} with VARE_UNDEFERR|VARE_WANTRES
Applying ${VAR:Q} to "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
QuoteMeta: [1\ 2\ 3]
Result of ${VAR:Q} is "1\ 2\ 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
+Var_Parse: ${VAR:tu:tl:Q} with VARE_UNDEFERR|VARE_WANTRES
Applying ${VAR:t...} to "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
Result of ${VAR:tu} is "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
Applying ${VAR:t...} to "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
@@ -39,8 +46,10 @@
Applying ${VAR:Q} to "1 2 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
QuoteMeta: [1\ 2\ 3]
Result of ${VAR:Q} is "1\ 2\ 3" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = none)
+Var_Parse: ${:Uvalue:${:UM*e}:Mvalu[e]} with VARE_UNDEFERR|VARE_WANTRES
Applying ${:U...} to "" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK)
Result of ${:Uvalue} is "value" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
+Var_Parse: ${:UM*e}:Mvalu[e]} with VARE_UNDEFERR|VARE_WANTRES
Applying ${:U...} to "" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK)
Result of ${:UM*e} is "M*e" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
Indirect modifier "M*e" from "${:UM*e}"
@@ -54,15 +63,18 @@
ModifyWords: split "value" into 1 words
VarMatch [value] [valu[e]]
Result of ${:Mvalu[e]} is "value" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
+Var_Parse: ${:UVAR} with VARE_WANTRES
Applying ${:U...} to "" (eflags = VARE_WANTRES, vflags = VAR_JUNK)
Result of ${:UVAR} is "VAR" (eflags = VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
Global:delete VAR
+Var_Parse: ${:Uvariable:unknown} with VARE_UNDEFERR|VARE_WANTRES
Applying ${:U...} to "" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK)
Result of ${:Uvariable} is "variable" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
Applying ${:u...} to "variable" (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
make: Unknown modifier 'u'
Result of ${:unknown} is error (eflags = VARE_UNDEFERR|VARE_WANTRES, vflags = VAR_JUNK|VAR_KEEP)
make: "vardebug.mk" line 44: Malformed conditional (${:Uvariable:unknown})
+Var_Parse: ${UNDEFINED} with VARE_UNDEFERR|VARE_WANTRES
make: "vardebug.mk" line 53: Malformed conditional (${UNDEFINED})
Global:RELEVANT = no
exit status 1
diff -r bedf8e0cb76b -r 6bffa7e0c92c usr.bin/make/var.c
--- a/usr.bin/make/var.c Sat Aug 08 17:03:04 2020 +0000
+++ b/usr.bin/make/var.c Sat Aug 08 18:50:11 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.431 2020/08/08 14:28:46 rillig Exp $ */
+/* $NetBSD: var.c,v 1.432 2020/08/08 18:50:11 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.431 2020/08/08 14:28:46 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.432 2020/08/08 18:50:11 rillig Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: var.c,v 1.431 2020/08/08 14:28:46 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.432 2020/08/08 18:50:11 rillig Exp $");
#endif
#endif /* not lint */
#endif
@@ -3347,6 +3347,11 @@
const char *extramodifiers;
Var *v;
char *nstr;
+ char eflags_str[VarEvalFlags_ToStringSize];
+
+ VAR_DEBUG("%s: %s with %s\n", __func__, str,
+ Enum_ToString(eflags_str, sizeof eflags_str, eflags,
+ VarEvalFlags_ToStringSpecs));
*freePtr = NULL;
extramodifiers = NULL; /* extra modifiers to apply first */
Home |
Main Index |
Thread Index |
Old Index