Thu Mar 3 19:36:35 2022 UTC ()
make: make debug logging for comparisons less technical


(rillig)
diff -r1.330 -r1.331 src/usr.bin/make/cond.c
diff -r1.6 -r1.7 src/usr.bin/make/unit-tests/cond-cmp-numeric.exp
diff -r1.15 -r1.16 src/usr.bin/make/unit-tests/cond-token-plain.exp
diff -r1.15 -r1.16 src/usr.bin/make/unit-tests/varmod-match-escape.exp
diff -r1.5 -r1.6 src/usr.bin/make/unit-tests/deptgt-makeflags.exp
diff -r1.5 -r1.6 src/usr.bin/make/unit-tests/opt-debug-file.exp
diff -r1.16 -r1.17 src/usr.bin/make/unit-tests/directive-export-impl.exp
diff -r1.8 -r1.9 src/usr.bin/make/unit-tests/directive-include.exp
diff -r1.2 -r1.3 src/usr.bin/make/unit-tests/opt-debug-cond.exp
diff -r1.11 -r1.12 src/usr.bin/make/unit-tests/varmod-ifelse.exp
diff -r1.14 -r1.15 src/usr.bin/make/unit-tests/varmod-loop.exp
diff -r1.3 -r1.4 src/usr.bin/make/unit-tests/varmod-match.exp
diff -r1.13 -r1.14 src/usr.bin/make/unit-tests/varname-dot-shell.exp

cvs diff -r1.330 -r1.331 src/usr.bin/make/cond.c (expand / switch to unified diff)

--- src/usr.bin/make/cond.c 2022/02/11 21:18:09 1.330
+++ src/usr.bin/make/cond.c 2022/03/03 19:36:35 1.331
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: cond.c,v 1.330 2022/02/11 21:18:09 rillig Exp $ */ 1/* $NetBSD: cond.c,v 1.331 2022/03/03 19:36:35 rillig Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1988, 1989, 1990 The Regents of the University of California. 4 * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to Berkeley by 7 * This code is derived from software contributed to Berkeley by
8 * Adam de Boor. 8 * Adam de Boor.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -85,27 +85,27 @@ @@ -85,27 +85,27 @@
85 * Cond_restore_depth 85 * Cond_restore_depth
86 * Save and restore the nesting of the conditions, at 86 * Save and restore the nesting of the conditions, at
87 * the start and end of including another makefile, to 87 * the start and end of including another makefile, to
88 * ensure that in each makefile the conditional 88 * ensure that in each makefile the conditional
89 * directives are well-balanced. 89 * directives are well-balanced.
90 */ 90 */
91 91
92#include <errno.h> 92#include <errno.h>
93 93
94#include "make.h" 94#include "make.h"
95#include "dir.h" 95#include "dir.h"
96 96
97/* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */ 97/* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */
98MAKE_RCSID("$NetBSD: cond.c,v 1.330 2022/02/11 21:18:09 rillig Exp $"); 98MAKE_RCSID("$NetBSD: cond.c,v 1.331 2022/03/03 19:36:35 rillig Exp $");
99 99
100/* 100/*
101 * Conditional expressions conform to this grammar: 101 * Conditional expressions conform to this grammar:
102 * Or -> And ('||' And)* 102 * Or -> And ('||' And)*
103 * And -> Term ('&&' Term)* 103 * And -> Term ('&&' Term)*
104 * Term -> Function '(' Argument ')' 104 * Term -> Function '(' Argument ')'
105 * Term -> Leaf Operator Leaf 105 * Term -> Leaf Operator Leaf
106 * Term -> Leaf 106 * Term -> Leaf
107 * Term -> '(' Or ')' 107 * Term -> '(' Or ')'
108 * Term -> '!' Term 108 * Term -> '!' Term
109 * Leaf -> "string" 109 * Leaf -> "string"
110 * Leaf -> Number 110 * Leaf -> Number
111 * Leaf -> VariableExpression 111 * Leaf -> VariableExpression
@@ -547,27 +547,27 @@ EvalNotEmpty(CondParser *par, const char @@ -547,27 +547,27 @@ EvalNotEmpty(CondParser *par, const char
547 * XXX: Whitespace should count as empty, just as in 547 * XXX: Whitespace should count as empty, just as in
548 * CondParser_FuncCallEmpty. 548 * CondParser_FuncCallEmpty.
549 */ 549 */
550 if (par->plain) 550 if (par->plain)
551 return value[0] != '\0'; 551 return value[0] != '\0';
552 552
553 return par->evalBare(value) != par->negateEvalBare; 553 return par->evalBare(value) != par->negateEvalBare;
554} 554}
555 555
556/* Evaluate a numerical comparison, such as in ".if ${VAR} >= 9". */ 556/* Evaluate a numerical comparison, such as in ".if ${VAR} >= 9". */
557static bool 557static bool
558EvalCompareNum(double lhs, ComparisonOp op, double rhs) 558EvalCompareNum(double lhs, ComparisonOp op, double rhs)
559{ 559{
560 DEBUG3(COND, "lhs = %f, rhs = %f, op = %.2s\n", lhs, rhs, opname[op]); 560 DEBUG3(COND, "Comparing %f %s %f\n", lhs, opname[op], rhs);
561 561
562 switch (op) { 562 switch (op) {
563 case LT: 563 case LT:
564 return lhs < rhs; 564 return lhs < rhs;
565 case LE: 565 case LE:
566 return lhs <= rhs; 566 return lhs <= rhs;
567 case GT: 567 case GT:
568 return lhs > rhs; 568 return lhs > rhs;
569 case GE: 569 case GE:
570 return lhs >= rhs; 570 return lhs >= rhs;
571 case NE: 571 case NE:
572 return lhs != rhs; 572 return lhs != rhs;
573 default: 573 default:
@@ -576,28 +576,27 @@ EvalCompareNum(double lhs, ComparisonOp  @@ -576,28 +576,27 @@ EvalCompareNum(double lhs, ComparisonOp
576} 576}
577 577
578static Token 578static Token
579EvalCompareStr(CondParser *par, const char *lhs, 579EvalCompareStr(CondParser *par, const char *lhs,
580 ComparisonOp op, const char *rhs) 580 ComparisonOp op, const char *rhs)
581{ 581{
582 if (op != EQ && op != NE) { 582 if (op != EQ && op != NE) {
583 Parse_Error(PARSE_FATAL, 583 Parse_Error(PARSE_FATAL,
584 "String comparison operator must be either == or !="); 584 "String comparison operator must be either == or !=");
585 par->printedError = true; 585 par->printedError = true;
586 return TOK_ERROR; 586 return TOK_ERROR;
587 } 587 }
588 588
589 DEBUG3(COND, "lhs = \"%s\", rhs = \"%s\", op = %.2s\n", 589 DEBUG3(COND, "Comparing \"%s\" %s \"%s\"\n", lhs, opname[op], rhs);
590 lhs, rhs, opname[op]); 
591 return ToToken((op == EQ) == (strcmp(lhs, rhs) == 0)); 590 return ToToken((op == EQ) == (strcmp(lhs, rhs) == 0));
592} 591}
593 592
594/* Evaluate a comparison, such as "${VAR} == 12345". */ 593/* Evaluate a comparison, such as "${VAR} == 12345". */
595static Token 594static Token
596EvalCompare(CondParser *par, const char *lhs, bool lhsQuoted, 595EvalCompare(CondParser *par, const char *lhs, bool lhsQuoted,
597 ComparisonOp op, const char *rhs, bool rhsQuoted) 596 ComparisonOp op, const char *rhs, bool rhsQuoted)
598{ 597{
599 double left, right; 598 double left, right;
600 599
601 if (!rhsQuoted && !lhsQuoted) 600 if (!rhsQuoted && !lhsQuoted)
602 if (TryParseNumber(lhs, &left) && TryParseNumber(rhs, &right)) 601 if (TryParseNumber(lhs, &left) && TryParseNumber(rhs, &right))
603 return ToToken(EvalCompareNum(left, op, right)); 602 return ToToken(EvalCompareNum(left, op, right));

cvs diff -r1.6 -r1.7 src/usr.bin/make/unit-tests/cond-cmp-numeric.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/cond-cmp-numeric.exp 2021/07/29 06:31:18 1.6
+++ src/usr.bin/make/unit-tests/cond-cmp-numeric.exp 2022/03/03 19:36:35 1.7
@@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
1CondParser_Eval: !(${:UINF} > 1e100) 1CondParser_Eval: !(${:UINF} > 1e100)
2make: "cond-cmp-numeric.mk" line 11: String comparison operator must be either == or != 2make: "cond-cmp-numeric.mk" line 11: String comparison operator must be either == or !=
3CondParser_Eval: ${:UNaN} > NaN 3CondParser_Eval: ${:UNaN} > NaN
4make: "cond-cmp-numeric.mk" line 16: String comparison operator must be either == or != 4make: "cond-cmp-numeric.mk" line 16: String comparison operator must be either == or !=
5CondParser_Eval: !(${:UNaN} == NaN) 5CondParser_Eval: !(${:UNaN} == NaN)
6lhs = "NaN", rhs = "NaN", op = == 6Comparing "NaN" == "NaN"
7CondParser_Eval: 123 ! 123 7CondParser_Eval: 123 ! 123
8make: "cond-cmp-numeric.mk" line 34: Malformed conditional (123 ! 123) 8make: "cond-cmp-numeric.mk" line 34: Malformed conditional (123 ! 123)
9CondParser_Eval: ${:U 123} < 124 9CondParser_Eval: ${:U 123} < 124
10lhs = 123.000000, rhs = 124.000000, op = < 10Comparing 123.000000 < 124.000000
11CondParser_Eval: ${:U123 } < 124 11CondParser_Eval: ${:U123 } < 124
12make: "cond-cmp-numeric.mk" line 50: String comparison operator must be either == or != 12make: "cond-cmp-numeric.mk" line 50: String comparison operator must be either == or !=
13make: Fatal errors encountered -- cannot continue 13make: Fatal errors encountered -- cannot continue
14make: stopped in unit-tests 14make: stopped in unit-tests
15exit status 1 15exit status 1

cvs diff -r1.15 -r1.16 src/usr.bin/make/unit-tests/cond-token-plain.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/cond-token-plain.exp 2022/01/08 20:21:34 1.15
+++ src/usr.bin/make/unit-tests/cond-token-plain.exp 2022/03/03 19:36:35 1.16
@@ -1,62 +1,62 @@ @@ -1,62 +1,62 @@
1CondParser_Eval: ${:Uvalue} != value 1CondParser_Eval: ${:Uvalue} != value
2lhs = "value", rhs = "value", op = != 2Comparing "value" != "value"
3CondParser_Eval: ${:U} != " 3CondParser_Eval: ${:U} != "
4lhs = "", rhs = "", op = != 4Comparing "" != ""
5CondParser_Eval: ${:U#hash} != "#hash" 5CondParser_Eval: ${:U#hash} != "#hash"
6lhs = "#hash", rhs = "#hash", op = != 6Comparing "#hash" != "#hash"
7CondParser_Eval: ${:U\\} != "\\ 7CondParser_Eval: ${:U\\} != "\\
8lhs = "\", rhs = "\", op = != 8Comparing "\" != "\"
9CondParser_Eval: ${:U#hash} != #hash 9CondParser_Eval: ${:U#hash} != #hash
10lhs = "#hash", rhs = "#hash", op = != 10Comparing "#hash" != "#hash"
11CondParser_Eval: 0 # This is treated as a comment, but why? 11CondParser_Eval: 0 # This is treated as a comment, but why?
12CondParser_Eval: ${0 # comment :?yes:no} != no 12CondParser_Eval: ${0 # comment :?yes:no} != no
13CondParser_Eval: 0 # comment  13CondParser_Eval: 0 # comment
14lhs = "no", rhs = "no", op = != 14Comparing "no" != "no"
15CondParser_Eval: ${1 # comment :?yes:no} != yes 15CondParser_Eval: ${1 # comment :?yes:no} != yes
16CondParser_Eval: 1 # comment  16CondParser_Eval: 1 # comment
17lhs = "yes", rhs = "yes", op = != 17Comparing "yes" != "yes"
18CondParser_Eval: ${UNDEF:Uundefined}!=undefined 18CondParser_Eval: ${UNDEF:Uundefined}!=undefined
19lhs = "undefined", rhs = "undefined", op = != 19Comparing "undefined" != "undefined"
20CondParser_Eval: ${UNDEF:U12345}>12345 20CondParser_Eval: ${UNDEF:U12345}>12345
21lhs = 12345.000000, rhs = 12345.000000, op = > 21Comparing 12345.000000 > 12345.000000
22CondParser_Eval: ${UNDEF:U12345}<12345 22CondParser_Eval: ${UNDEF:U12345}<12345
23lhs = 12345.000000, rhs = 12345.000000, op = < 23Comparing 12345.000000 < 12345.000000
24CondParser_Eval: (${UNDEF:U0})||0 24CondParser_Eval: (${UNDEF:U0})||0
25CondParser_Eval: ${:Uvar}&&name != "var&&name" 25CondParser_Eval: ${:Uvar}&&name != "var&&name"
26lhs = "var&&name", rhs = "var&&name", op = != 26Comparing "var&&name" != "var&&name"
27CondParser_Eval: ${:Uvar}||name != "var||name" 27CondParser_Eval: ${:Uvar}||name != "var||name"
28lhs = "var||name", rhs = "var||name", op = != 28Comparing "var||name" != "var||name"
29CondParser_Eval: bare 29CondParser_Eval: bare
30make: "cond-token-plain.mk" line 105: A bare word is treated like defined(...), and the variable 'bare' is not defined. 30make: "cond-token-plain.mk" line 105: A bare word is treated like defined(...), and the variable 'bare' is not defined.
31CondParser_Eval: VAR 31CondParser_Eval: VAR
32make: "cond-token-plain.mk" line 111: A bare word is treated like defined(...). 32make: "cond-token-plain.mk" line 111: A bare word is treated like defined(...).
33CondParser_Eval: V${:UA}R 33CondParser_Eval: V${:UA}R
34make: "cond-token-plain.mk" line 118: ok 34make: "cond-token-plain.mk" line 118: ok
35CondParser_Eval: V${UNDEF}AR 35CondParser_Eval: V${UNDEF}AR
36make: "cond-token-plain.mk" line 126: Undefined variables in bare words expand to an empty string. 36make: "cond-token-plain.mk" line 126: Undefined variables in bare words expand to an empty string.
37CondParser_Eval: 0${:Ux00} 37CondParser_Eval: 0${:Ux00}
38make: "cond-token-plain.mk" line 134: Numbers can be composed from literals and variable expressions. 38make: "cond-token-plain.mk" line 134: Numbers can be composed from literals and variable expressions.
39CondParser_Eval: 0${:Ux01} 39CondParser_Eval: 0${:Ux01}
40make: "cond-token-plain.mk" line 138: Numbers can be composed from literals and variable expressions. 40make: "cond-token-plain.mk" line 138: Numbers can be composed from literals and variable expressions.
41CondParser_Eval: "" == 41CondParser_Eval: "" ==
42make: "cond-token-plain.mk" line 144: Missing right-hand side of operator '==' 42make: "cond-token-plain.mk" line 144: Missing right-hand side of operator '=='
43CondParser_Eval: == "" 43CondParser_Eval: == ""
44make: "cond-token-plain.mk" line 152: Malformed conditional (== "") 44make: "cond-token-plain.mk" line 152: Malformed conditional (== "")
45CondParser_Eval: \\ 45CondParser_Eval: \\
46make: "cond-token-plain.mk" line 167: The variable '\\' is not defined. 46make: "cond-token-plain.mk" line 167: The variable '\\' is not defined.
47CondParser_Eval: \\ 47CondParser_Eval: \\
48make: "cond-token-plain.mk" line 172: Now the variable '\\' is defined. 48make: "cond-token-plain.mk" line 172: Now the variable '\\' is defined.
49CondParser_Eval: "unquoted\"quoted" != unquoted"quoted 49CondParser_Eval: "unquoted\"quoted" != unquoted"quoted
50lhs = "unquoted"quoted", rhs = "unquoted"quoted", op = != 50Comparing "unquoted"quoted" != "unquoted"quoted"
51CondParser_Eval: $$$$$$$$ != "" 51CondParser_Eval: $$$$$$$$ != ""
52CondParser_Eval: left == right 52CondParser_Eval: left == right
53make: "cond-token-plain.mk" line 195: Malformed conditional (left == right) 53make: "cond-token-plain.mk" line 195: Malformed conditional (left == right)
54CondParser_Eval: ${0:?:} || left == right 54CondParser_Eval: ${0:?:} || left == right
55CondParser_Eval: 0 55CondParser_Eval: 0
56make: "cond-token-plain.mk" line 201: Malformed conditional (${0:?:} || left == right) 56make: "cond-token-plain.mk" line 201: Malformed conditional (${0:?:} || left == right)
57CondParser_Eval: left == right || ${0:?:} 57CondParser_Eval: left == right || ${0:?:}
58make: "cond-token-plain.mk" line 206: Malformed conditional (left == right || ${0:?:}) 58make: "cond-token-plain.mk" line 206: Malformed conditional (left == right || ${0:?:})
59make: "cond-token-plain.mk" line 225: Malformed conditional (VAR.${IF_COUNT::+=1} != "") 59make: "cond-token-plain.mk" line 225: Malformed conditional (VAR.${IF_COUNT::+=1} != "")
60make: Fatal errors encountered -- cannot continue 60make: Fatal errors encountered -- cannot continue
61make: stopped in unit-tests 61make: stopped in unit-tests
62exit status 1 62exit status 1

cvs diff -r1.15 -r1.16 src/usr.bin/make/unit-tests/varmod-match-escape.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/varmod-match-escape.exp 2021/04/10 22:09:54 1.15
+++ src/usr.bin/make/unit-tests/varmod-match-escape.exp 2022/03/03 19:36:35 1.16
@@ -1,39 +1,39 @@ @@ -1,39 +1,39 @@
1Global: SPECIALS = \: : \\ * \* 1Global: SPECIALS = \: : \\ * \*
2CondParser_Eval: ${SPECIALS:M${:U}\:} != ${SPECIALS:M\:${:U}} 2CondParser_Eval: ${SPECIALS:M${:U}\:} != ${SPECIALS:M\:${:U}}
3Var_Parse: ${SPECIALS:M${:U}\:} != ${SPECIALS:M\:${:U}} (eval-defined) 3Var_Parse: ${SPECIALS:M${:U}\:} != ${SPECIALS:M\:${:U}} (eval-defined)
4Evaluating modifier ${SPECIALS:M...} on value "\: : \\ * \*" 4Evaluating modifier ${SPECIALS:M...} on value "\: : \\ * \*"
5Pattern for ':M' is "\:" 5Pattern for ':M' is "\:"
6ModifyWords: split "\: : \\ * \*" into 5 words 6ModifyWords: split "\: : \\ * \*" into 5 words
7Result of ${SPECIALS:M${:U}\:} is ":" 7Result of ${SPECIALS:M${:U}\:} is ":"
8Var_Parse: ${SPECIALS:M\:${:U}} (eval-defined) 8Var_Parse: ${SPECIALS:M\:${:U}} (eval-defined)
9Evaluating modifier ${SPECIALS:M...} on value "\: : \\ * \*" 9Evaluating modifier ${SPECIALS:M...} on value "\: : \\ * \*"
10Pattern for ':M' is ":" 10Pattern for ':M' is ":"
11ModifyWords: split "\: : \\ * \*" into 5 words 11ModifyWords: split "\: : \\ * \*" into 5 words
12Result of ${SPECIALS:M\:${:U}} is ":" 12Result of ${SPECIALS:M\:${:U}} is ":"
13lhs = ":", rhs = ":", op = != 13Comparing ":" != ":"
14Global: VALUES = : :: :\: 14Global: VALUES = : :: :\:
15CondParser_Eval: ${VALUES:M\:${:U\:}} != ${VALUES:M${:U\:}\:} 15CondParser_Eval: ${VALUES:M\:${:U\:}} != ${VALUES:M${:U\:}\:}
16Var_Parse: ${VALUES:M\:${:U\:}} != ${VALUES:M${:U\:}\:} (eval-defined) 16Var_Parse: ${VALUES:M\:${:U\:}} != ${VALUES:M${:U\:}\:} (eval-defined)
17Evaluating modifier ${VALUES:M...} on value ": :: :\:" 17Evaluating modifier ${VALUES:M...} on value ": :: :\:"
18Var_Parse: ${:U:} (eval-defined) 18Var_Parse: ${:U:} (eval-defined)
19Evaluating modifier ${:U} on value "" (eval-defined, undefined) 19Evaluating modifier ${:U} on value "" (eval-defined, undefined)
20Result of ${:U} is "" (eval-defined, defined) 20Result of ${:U} is "" (eval-defined, defined)
21Pattern for ':M' is ":" 21Pattern for ':M' is ":"
22ModifyWords: split ": :: :\:" into 3 words 22ModifyWords: split ": :: :\:" into 3 words
23Result of ${VALUES:M\:${:U\:}} is ":" 23Result of ${VALUES:M\:${:U\:}} is ":"
24Var_Parse: ${VALUES:M${:U\:}\:} (eval-defined) 24Var_Parse: ${VALUES:M${:U\:}\:} (eval-defined)
25Evaluating modifier ${VALUES:M...} on value ": :: :\:" 25Evaluating modifier ${VALUES:M...} on value ": :: :\:"
26Var_Parse: ${:U\:}\: (eval-defined) 26Var_Parse: ${:U\:}\: (eval-defined)
27Evaluating modifier ${:U...} on value "" (eval-defined, undefined) 27Evaluating modifier ${:U...} on value "" (eval-defined, undefined)
28Result of ${:U\:} is ":" (eval-defined, defined) 28Result of ${:U\:} is ":" (eval-defined, defined)
29Pattern for ':M' is ":\:" 29Pattern for ':M' is ":\:"
30ModifyWords: split ": :: :\:" into 3 words 30ModifyWords: split ": :: :\:" into 3 words
31Result of ${VALUES:M${:U\:}\:} is "::" 31Result of ${VALUES:M${:U\:}\:} is "::"
32lhs = ":", rhs = "::", op = != 32Comparing ":" != "::"
33make: "varmod-match-escape.mk" line 42: warning: XXX: Oops 33make: "varmod-match-escape.mk" line 42: warning: XXX: Oops
34Global: .MAKEFLAGS = -r -k -d cv -d 34Global: .MAKEFLAGS = -r -k -d cv -d
35Global: .MAKEFLAGS = -r -k -d cv -d 0 35Global: .MAKEFLAGS = -r -k -d cv -d 0
36make: "varmod-match-escape.mk" line 67: Dollar followed by nothing 36make: "varmod-match-escape.mk" line 67: Dollar followed by nothing
37make: Fatal errors encountered -- cannot continue 37make: Fatal errors encountered -- cannot continue
38make: stopped in unit-tests 38make: stopped in unit-tests
39exit status 1 39exit status 1

cvs diff -r1.5 -r1.6 src/usr.bin/make/unit-tests/deptgt-makeflags.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/deptgt-makeflags.exp 2021/04/05 13:35:41 1.5
+++ src/usr.bin/make/unit-tests/deptgt-makeflags.exp 2022/03/03 19:36:35 1.6
@@ -1,10 +1,10 @@ @@ -1,10 +1,10 @@
1Global:delete DOLLAR (not found) 1Global:delete DOLLAR (not found)
2Command: DOLLAR = $$$$ 2Command: DOLLAR = $$$$
3Global: .MAKEOVERRIDES = VAR DOLLAR 3Global: .MAKEOVERRIDES = VAR DOLLAR
4CondParser_Eval: ${DOLLAR} != "\$\$" 4CondParser_Eval: ${DOLLAR} != "\$\$"
5Var_Parse: ${DOLLAR} != "\$\$" (eval-defined) 5Var_Parse: ${DOLLAR} != "\$\$" (eval-defined)
6lhs = "$$", rhs = "$$", op = != 6Comparing "$$" != "$$"
7Global: .MAKEFLAGS = -r -k -D VAR -D VAR -d cv -d 7Global: .MAKEFLAGS = -r -k -D VAR -D VAR -d cv -d
8Global: .MAKEFLAGS = -r -k -D VAR -D VAR -d cv -d 0 8Global: .MAKEFLAGS = -r -k -D VAR -D VAR -d cv -d 0
9make: Unterminated quoted string [make VAR=initial UNBALANCED='] 9make: Unterminated quoted string [make VAR=initial UNBALANCED=']
10exit status 0 10exit status 0

cvs diff -r1.5 -r1.6 src/usr.bin/make/unit-tests/opt-debug-file.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/opt-debug-file.exp 2022/01/11 19:47:34 1.5
+++ src/usr.bin/make/unit-tests/opt-debug-file.exp 2022/03/03 19:36:35 1.6
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
1make: "opt-debug-file.mk" line 43: This goes to stderr only, once. 1make: "opt-debug-file.mk" line 43: This goes to stderr only, once.
2make: "opt-debug-file.mk" line 45: This goes to stderr only, once. 2make: "opt-debug-file.mk" line 45: This goes to stderr only, once.
3make: "opt-debug-file.mk" line 47: This goes to stderr, and in addition to the debug log. 3make: "opt-debug-file.mk" line 47: This goes to stderr, and in addition to the debug log.
4CondParser_Eval: ${:!cat opt-debug-file.debuglog!:Maddition:[#]} != 1 4CondParser_Eval: ${:!cat opt-debug-file.debuglog!:Maddition:[#]} != 1
5lhs = 1.000000, rhs = 1.000000, op = != 5Comparing 1.000000 != 1.000000
6make: Missing delimiter for modifier ':S' 6make: Missing delimiter for modifier ':S'
7make: Missing delimiter for modifier ':S' 7make: Missing delimiter for modifier ':S'
8make: Missing delimiter for modifier ':S' 8make: Missing delimiter for modifier ':S'
9CondParser_Eval: ${:!cat opt-debug-file.debuglog!:Mdelimiter:[#]} != 1 9CondParser_Eval: ${:!cat opt-debug-file.debuglog!:Mdelimiter:[#]} != 1
10lhs = 1.000000, rhs = 1.000000, op = != 10Comparing 1.000000 != 1.000000
11Cannot open debug file "/nonexistent-6f21c672-a22d-4ef7/opt-debug-file.debuglog" 11Cannot open debug file "/nonexistent-6f21c672-a22d-4ef7/opt-debug-file.debuglog"
12exit status 2 12exit status 2

cvs diff -r1.16 -r1.17 src/usr.bin/make/unit-tests/directive-export-impl.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/directive-export-impl.exp 2022/01/10 20:32:29 1.16
+++ src/usr.bin/make/unit-tests/directive-export-impl.exp 2022/03/03 19:36:35 1.17
@@ -13,46 +13,46 @@ ParseDependency(: ) @@ -13,46 +13,46 @@ ParseDependency(: )
13CondParser_Eval: ${:!echo "\$UT_VAR"!} != "<>" 13CondParser_Eval: ${:!echo "\$UT_VAR"!} != "<>"
14Var_Parse: ${:!echo "\$UT_VAR"!} != "<>" (eval-defined) 14Var_Parse: ${:!echo "\$UT_VAR"!} != "<>" (eval-defined)
15Evaluating modifier ${:!...} on value "" (eval-defined, undefined) 15Evaluating modifier ${:!...} on value "" (eval-defined, undefined)
16Modifier part: "echo "$UT_VAR"" 16Modifier part: "echo "$UT_VAR""
17Capturing the output of command "echo "$UT_VAR"" 17Capturing the output of command "echo "$UT_VAR""
18Var_Parse: ${.MAKE.EXPORTED:O:u} (eval) 18Var_Parse: ${.MAKE.EXPORTED:O:u} (eval)
19Evaluating modifier ${.MAKE.EXPORTED:O} on value "UT_VAR" 19Evaluating modifier ${.MAKE.EXPORTED:O} on value "UT_VAR"
20Result of ${.MAKE.EXPORTED:O} is "UT_VAR" 20Result of ${.MAKE.EXPORTED:O} is "UT_VAR"
21Evaluating modifier ${.MAKE.EXPORTED:u} on value "UT_VAR" 21Evaluating modifier ${.MAKE.EXPORTED:u} on value "UT_VAR"
22Result of ${.MAKE.EXPORTED:u} is "UT_VAR" 22Result of ${.MAKE.EXPORTED:u} is "UT_VAR"
23Var_Parse: ${UT_VAR} (eval) 23Var_Parse: ${UT_VAR} (eval)
24Var_Parse: ${REF}> (eval) 24Var_Parse: ${REF}> (eval)
25Result of ${:!echo "\$UT_VAR"!} is "<>" (eval-defined, defined) 25Result of ${:!echo "\$UT_VAR"!} is "<>" (eval-defined, defined)
26lhs = "<>", rhs = "<>", op = != 26Comparing "<>" != "<>"
27Parsing line 50: : ${UT_VAR:N*} 27Parsing line 50: : ${UT_VAR:N*}
28Var_Parse: ${UT_VAR:N*} (eval-defined) 28Var_Parse: ${UT_VAR:N*} (eval-defined)
29Var_Parse: ${REF}> (eval-defined) 29Var_Parse: ${REF}> (eval-defined)
30Evaluating modifier ${UT_VAR:N...} on value "<>" 30Evaluating modifier ${UT_VAR:N...} on value "<>"
31Pattern for ':N' is "*" 31Pattern for ':N' is "*"
32ModifyWords: split "<>" into 1 word 32ModifyWords: split "<>" into 1 word
33Result of ${UT_VAR:N*} is "" 33Result of ${UT_VAR:N*} is ""
34ParseDependency(: ) 34ParseDependency(: )
35Parsing line 54: REF= defined 35Parsing line 54: REF= defined
36Global: REF = defined 36Global: REF = defined
37CondParser_Eval: ${:!echo "\$UT_VAR"!} != "<defined>" 37CondParser_Eval: ${:!echo "\$UT_VAR"!} != "<defined>"
38Var_Parse: ${:!echo "\$UT_VAR"!} != "<defined>" (eval-defined) 38Var_Parse: ${:!echo "\$UT_VAR"!} != "<defined>" (eval-defined)
39Evaluating modifier ${:!...} on value "" (eval-defined, undefined) 39Evaluating modifier ${:!...} on value "" (eval-defined, undefined)
40Modifier part: "echo "$UT_VAR"" 40Modifier part: "echo "$UT_VAR""
41Capturing the output of command "echo "$UT_VAR"" 41Capturing the output of command "echo "$UT_VAR""
42Var_Parse: ${.MAKE.EXPORTED:O:u} (eval) 42Var_Parse: ${.MAKE.EXPORTED:O:u} (eval)
43Evaluating modifier ${.MAKE.EXPORTED:O} on value "UT_VAR" 43Evaluating modifier ${.MAKE.EXPORTED:O} on value "UT_VAR"
44Result of ${.MAKE.EXPORTED:O} is "UT_VAR" 44Result of ${.MAKE.EXPORTED:O} is "UT_VAR"
45Evaluating modifier ${.MAKE.EXPORTED:u} on value "UT_VAR" 45Evaluating modifier ${.MAKE.EXPORTED:u} on value "UT_VAR"
46Result of ${.MAKE.EXPORTED:u} is "UT_VAR" 46Result of ${.MAKE.EXPORTED:u} is "UT_VAR"
47Var_Parse: ${UT_VAR} (eval) 47Var_Parse: ${UT_VAR} (eval)
48Var_Parse: ${REF}> (eval) 48Var_Parse: ${REF}> (eval)
49Result of ${:!echo "\$UT_VAR"!} is "<defined>" (eval-defined, defined) 49Result of ${:!echo "\$UT_VAR"!} is "<defined>" (eval-defined, defined)
50lhs = "<defined>", rhs = "<defined>", op = != 50Comparing "<defined>" != "<defined>"
51Parsing line 62: all: 51Parsing line 62: all:
52ParseDependency(all:) 52ParseDependency(all:)
53Global: .ALLTARGETS = all 53Global: .ALLTARGETS = all
54Parsing line 63: .MAKEFLAGS: -d0 54Parsing line 63: .MAKEFLAGS: -d0
55ParseDependency(.MAKEFLAGS: -d0) 55ParseDependency(.MAKEFLAGS: -d0)
56Global: .MAKEFLAGS = -r -k -d cpv -d 56Global: .MAKEFLAGS = -r -k -d cpv -d
57Global: .MAKEFLAGS = -r -k -d cpv -d 0 57Global: .MAKEFLAGS = -r -k -d cpv -d 0
58exit status 0 58exit status 0

cvs diff -r1.8 -r1.9 src/usr.bin/make/unit-tests/directive-include.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/directive-include.exp 2021/12/14 01:00:04 1.8
+++ src/usr.bin/make/unit-tests/directive-include.exp 2022/03/03 19:36:35 1.9
@@ -1,13 +1,13 @@ @@ -1,13 +1,13 @@
1CondParser_Eval: ${.MAKE.MAKEFILES:T} != "${.PARSEFILE} null" 1CondParser_Eval: ${.MAKE.MAKEFILES:T} != "${.PARSEFILE} null"
2lhs = "directive-include.mk null", rhs = "directive-include.mk null", op = != 2Comparing "directive-include.mk null" != "directive-include.mk null"
3CondParser_Eval: ${.MAKE.MAKEFILES:T} != "${.PARSEFILE} null" 3CondParser_Eval: ${.MAKE.MAKEFILES:T} != "${.PARSEFILE} null"
4lhs = "directive-include.mk null", rhs = "directive-include.mk null", op = != 4Comparing "directive-include.mk null" != "directive-include.mk null"
5make: "directive-include.mk" line 25: Could not find nonexistent.mk 5make: "directive-include.mk" line 25: Could not find nonexistent.mk
6make: "directive-include.mk" line 47: Could not find " 6make: "directive-include.mk" line 47: Could not find "
7make: "directive-include.mk" line 52: Unknown modifier "Z" 7make: "directive-include.mk" line 52: Unknown modifier "Z"
8make: "directive-include.mk" line 52: Could not find nonexistent.mk 8make: "directive-include.mk" line 52: Could not find nonexistent.mk
9make: "directive-include.mk" line 57: Cannot open /nonexistent 9make: "directive-include.mk" line 57: Cannot open /nonexistent
10make: "directive-include.mk" line 62: Invalid line type 10make: "directive-include.mk" line 62: Invalid line type
11make: Fatal errors encountered -- cannot continue 11make: Fatal errors encountered -- cannot continue
12make: stopped in unit-tests 12make: stopped in unit-tests
13exit status 1 13exit status 1

cvs diff -r1.2 -r1.3 src/usr.bin/make/unit-tests/opt-debug-cond.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/opt-debug-cond.exp 2022/01/23 16:09:38 1.2
+++ src/usr.bin/make/unit-tests/opt-debug-cond.exp 2022/03/03 19:36:35 1.3
@@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
1CondParser_Eval: ${:U12345} > ${:U55555} 1CondParser_Eval: ${:U12345} > ${:U55555}
2lhs = 12345.000000, rhs = 55555.000000, op = > 2Comparing 12345.000000 > 55555.000000
3CondParser_Eval: "string" != "string" 3CondParser_Eval: "string" != "string"
4lhs = "string", rhs = "string", op = != 4Comparing "string" != "string"
5CondParser_Eval: "nonempty" 5CondParser_Eval: "nonempty"
6exit status 0 6exit status 0

cvs diff -r1.11 -r1.12 src/usr.bin/make/unit-tests/varmod-ifelse.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/varmod-ifelse.exp 2021/06/11 13:01:28 1.11
+++ src/usr.bin/make/unit-tests/varmod-ifelse.exp 2022/03/03 19:36:35 1.12
@@ -1,30 +1,30 @@ @@ -1,30 +1,30 @@
1make: Bad conditional expression 'variable expression == "literal"' in 'variable expression == "literal"?bad:bad' 1make: Bad conditional expression 'variable expression == "literal"' in 'variable expression == "literal"?bad:bad'
2make: "varmod-ifelse.mk" line 27: Malformed conditional (${${:Uvariable expression} == "literal":?bad:bad}) 2make: "varmod-ifelse.mk" line 27: Malformed conditional (${${:Uvariable expression} == "literal":?bad:bad})
3make: Bad conditional expression ' == ""' in ' == ""?bad-assign:bad-assign' 3make: Bad conditional expression ' == ""' in ' == ""?bad-assign:bad-assign'
4make: Bad conditional expression ' == ""' in ' == ""?bad-cond:bad-cond' 4make: Bad conditional expression ' == ""' in ' == ""?bad-cond:bad-cond'
5make: "varmod-ifelse.mk" line 44: Malformed conditional (${${UNDEF} == "":?bad-cond:bad-cond}) 5make: "varmod-ifelse.mk" line 44: Malformed conditional (${${UNDEF} == "":?bad-cond:bad-cond})
6make: Bad conditional expression '1 == == 2' in '1 == == 2?yes:no' 6make: Bad conditional expression '1 == == 2' in '1 == == 2?yes:no'
7make: "varmod-ifelse.mk" line 66: Malformed conditional (${1 == == 2:?yes:no} != "") 7make: "varmod-ifelse.mk" line 66: Malformed conditional (${1 == == 2:?yes:no} != "")
8CondParser_Eval: "${1 == == 2:?yes:no}" != "" 8CondParser_Eval: "${1 == == 2:?yes:no}" != ""
9CondParser_Eval: 1 == == 2 9CondParser_Eval: 1 == == 2
10lhs = 1.000000, rhs = 0.000000, op = == 10Comparing 1.000000 == 0.000000
11make: Bad conditional expression '1 == == 2' in '1 == == 2?yes:no' 11make: Bad conditional expression '1 == == 2' in '1 == == 2?yes:no'
12lhs = "", rhs = "", op = != 12Comparing "" != ""
13make: "varmod-ifelse.mk" line 92: warning: Oops, the parse error should have been propagated. 13make: "varmod-ifelse.mk" line 92: warning: Oops, the parse error should have been propagated.
14CondParser_Eval: ${ ${:U\$}{VAR} == value :?ok:bad} != "ok" 14CondParser_Eval: ${ ${:U\$}{VAR} == value :?ok:bad} != "ok"
15CondParser_Eval: ${VAR} == value  15CondParser_Eval: ${VAR} == value
16lhs = "value", rhs = "value", op = == 16Comparing "value" == "value"
17lhs = "ok", rhs = "ok", op = != 17Comparing "ok" != "ok"
18make: "varmod-ifelse.mk" line 153: no. 18make: "varmod-ifelse.mk" line 153: no.
19make: "varmod-ifelse.mk" line 154: String comparison operator must be either == or != 19make: "varmod-ifelse.mk" line 154: String comparison operator must be either == or !=
20make: Bad conditional expression 'string == "literal" || no >= 10' in 'string == "literal" || no >= 10?yes:no' 20make: Bad conditional expression 'string == "literal" || no >= 10' in 'string == "literal" || no >= 10?yes:no'
21make: "varmod-ifelse.mk" line 154: . 21make: "varmod-ifelse.mk" line 154: .
22make: Bad conditional expression 'string == "literal" && >= 10' in 'string == "literal" && >= 10?yes:no' 22make: Bad conditional expression 'string == "literal" && >= 10' in 'string == "literal" && >= 10?yes:no'
23make: "varmod-ifelse.mk" line 159: . 23make: "varmod-ifelse.mk" line 159: .
24make: Bad conditional expression 'string == "literal" || >= 10' in 'string == "literal" || >= 10?yes:no' 24make: Bad conditional expression 'string == "literal" || >= 10' in 'string == "literal" || >= 10?yes:no'
25make: "varmod-ifelse.mk" line 160: . 25make: "varmod-ifelse.mk" line 160: .
26make: "varmod-ifelse.mk" line 167: true 26make: "varmod-ifelse.mk" line 167: true
27make: "varmod-ifelse.mk" line 169: false 27make: "varmod-ifelse.mk" line 169: false
28make: Bad conditional expression ' ' in ' ?true:false' 28make: Bad conditional expression ' ' in ' ?true:false'
29make: "varmod-ifelse.mk" line 171:  29make: "varmod-ifelse.mk" line 171:
30make: Fatal errors encountered -- cannot continue 30make: Fatal errors encountered -- cannot continue

cvs diff -r1.14 -r1.15 src/usr.bin/make/unit-tests/varmod-loop.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/varmod-loop.exp 2021/12/28 15:49:00 1.14
+++ src/usr.bin/make/unit-tests/varmod-loop.exp 2022/03/03 19:36:35 1.15
@@ -1,16 +1,16 @@ @@ -1,16 +1,16 @@
1Parsing line 78: USE_8_DOLLARS= ${:U1:@var@${8_DOLLARS}@} ${8_DOLLARS} $$$$$$$$ 1Parsing line 78: USE_8_DOLLARS= ${:U1:@var@${8_DOLLARS}@} ${8_DOLLARS} $$$$$$$$
2CondParser_Eval: ${USE_8_DOLLARS} != "\$\$\$\$ \$\$\$\$ \$\$\$\$" 2CondParser_Eval: ${USE_8_DOLLARS} != "\$\$\$\$ \$\$\$\$ \$\$\$\$"
3lhs = "$$$$ $$$$ $$$$", rhs = "$$$$ $$$$ $$$$", op = != 3Comparing "$$$$ $$$$ $$$$" != "$$$$ $$$$ $$$$"
4Parsing line 83: SUBST_CONTAINING_LOOP:= ${USE_8_DOLLARS} 4Parsing line 83: SUBST_CONTAINING_LOOP:= ${USE_8_DOLLARS}
5CondParser_Eval: ${SUBST_CONTAINING_LOOP} != "\$\$ \$\$\$\$ \$\$\$\$" 5CondParser_Eval: ${SUBST_CONTAINING_LOOP} != "\$\$ \$\$\$\$ \$\$\$\$"
6lhs = "$$ $$$$ $$$$", rhs = "$$ $$$$ $$$$", op = != 6Comparing "$$ $$$$ $$$$" != "$$ $$$$ $$$$"
7Parsing line 108: .MAKEFLAGS: -d0 7Parsing line 108: .MAKEFLAGS: -d0
8ParseDependency(.MAKEFLAGS: -d0) 8ParseDependency(.MAKEFLAGS: -d0)
9:varname-overwriting-target: :x1y x2y x3y: :: 9:varname-overwriting-target: :x1y x2y x3y: ::
10mod-loop-dollar:1: 10mod-loop-dollar:1:
11mod-loop-dollar:${word}$: 11mod-loop-dollar:${word}$:
12mod-loop-dollar:$3$: 12mod-loop-dollar:$3$:
13mod-loop-dollar:$${word}$$: 13mod-loop-dollar:$${word}$$:
14mod-loop-dollar:$$5$$: 14mod-loop-dollar:$$5$$:
15mod-loop-dollar:$$${word}$$$: 15mod-loop-dollar:$$${word}$$$:
16exit status 0 16exit status 0

cvs diff -r1.3 -r1.4 src/usr.bin/make/unit-tests/varmod-match.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/varmod-match.exp 2020/09/12 22:35:43 1.3
+++ src/usr.bin/make/unit-tests/varmod-match.exp 2022/03/03 19:36:35 1.4
@@ -1,12 +1,12 @@ @@ -1,12 +1,12 @@
1CondParser_Eval: ${NUMBERS:M[A-Z]*} != "One Two Three Four" 1CondParser_Eval: ${NUMBERS:M[A-Z]*} != "One Two Three Four"
2lhs = "One Two Three Four", rhs = "One Two Three Four", op = != 2Comparing "One Two Three Four" != "One Two Three Four"
3CondParser_Eval: ${NUMBERS:M[^A-Z]*} != "five six seven" 3CondParser_Eval: ${NUMBERS:M[^A-Z]*} != "five six seven"
4lhs = "five six seven", rhs = "five six seven", op = != 4Comparing "five six seven" != "five six seven"
5CondParser_Eval: ${NUMBERS:M[^s]*[ex]} != "One Three five" 5CondParser_Eval: ${NUMBERS:M[^s]*[ex]} != "One Three five"
6lhs = "One Three five", rhs = "One Three five", op = != 6Comparing "One Three five" != "One Three five"
7CondParser_Eval: ${:U****************:M****************b} 7CondParser_Eval: ${:U****************:M****************b}
8CondParser_Eval: ${:Ua \$ sign:M*$$*} != "\$" 8CondParser_Eval: ${:Ua \$ sign:M*$$*} != "\$"
9lhs = "$", rhs = "$", op = != 9Comparing "$" != "$"
10CondParser_Eval: ${:Ua \$ sign any-asterisk:M*\$*} != "any-asterisk" 10CondParser_Eval: ${:Ua \$ sign any-asterisk:M*\$*} != "any-asterisk"
11lhs = "any-asterisk", rhs = "any-asterisk", op = != 11Comparing "any-asterisk" != "any-asterisk"
12exit status 0 12exit status 0

cvs diff -r1.13 -r1.14 src/usr.bin/make/unit-tests/varname-dot-shell.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/varname-dot-shell.exp 2021/12/28 15:49:00 1.13
+++ src/usr.bin/make/unit-tests/varname-dot-shell.exp 2022/03/03 19:36:35 1.14
@@ -1,32 +1,32 @@ @@ -1,32 +1,32 @@
1Parsing line 10: ORIG_SHELL:= ${.SHELL} 1Parsing line 10: ORIG_SHELL:= ${.SHELL}
2Global: ORIG_SHELL =  2Global: ORIG_SHELL =
3Var_Parse: ${.SHELL} (eval-keep-dollar-and-undefined) 3Var_Parse: ${.SHELL} (eval-keep-dollar-and-undefined)
4Global:delete .SHELL (not found) 4Global:delete .SHELL (not found)
5Command: .SHELL = (details omitted) 5Command: .SHELL = (details omitted)
6Global: ORIG_SHELL = (details omitted) 6Global: ORIG_SHELL = (details omitted)
7Parsing line 12: .SHELL= overwritten 7Parsing line 12: .SHELL= overwritten
8Global: .SHELL = overwritten 8Global: .SHELL = overwritten
9CondParser_Eval: ${.SHELL} != ${ORIG_SHELL} 9CondParser_Eval: ${.SHELL} != ${ORIG_SHELL}
10Var_Parse: ${.SHELL} != ${ORIG_SHELL} (eval-defined) 10Var_Parse: ${.SHELL} != ${ORIG_SHELL} (eval-defined)
11Var_Parse: ${ORIG_SHELL} (eval-defined) 11Var_Parse: ${ORIG_SHELL} (eval-defined)
12lhs = "(details omitted)", rhs = "(details omitted)", op = != 12Comparing "(details omitted)" != "(details omitted)"
13Parsing line 19: .MAKEFLAGS: .SHELL+=appended 13Parsing line 19: .MAKEFLAGS: .SHELL+=appended
14ParseDependency(.MAKEFLAGS: .SHELL+=appended) 14ParseDependency(.MAKEFLAGS: .SHELL+=appended)
15Ignoring append to .SHELL since it is read-only 15Ignoring append to .SHELL since it is read-only
16CondParser_Eval: ${.SHELL} != ${ORIG_SHELL} 16CondParser_Eval: ${.SHELL} != ${ORIG_SHELL}
17Var_Parse: ${.SHELL} != ${ORIG_SHELL} (eval-defined) 17Var_Parse: ${.SHELL} != ${ORIG_SHELL} (eval-defined)
18Var_Parse: ${ORIG_SHELL} (eval-defined) 18Var_Parse: ${ORIG_SHELL} (eval-defined)
19lhs = "(details omitted)", rhs = "(details omitted)", op = != 19Comparing "(details omitted)" != "(details omitted)"
20Parsing line 27: .undef .SHELL 20Parsing line 27: .undef .SHELL
21Global:delete .SHELL 21Global:delete .SHELL
22Parsing line 28: .SHELL= newly overwritten 22Parsing line 28: .SHELL= newly overwritten
23Global: .SHELL = newly overwritten 23Global: .SHELL = newly overwritten
24CondParser_Eval: ${.SHELL} != ${ORIG_SHELL} 24CondParser_Eval: ${.SHELL} != ${ORIG_SHELL}
25Var_Parse: ${.SHELL} != ${ORIG_SHELL} (eval-defined) 25Var_Parse: ${.SHELL} != ${ORIG_SHELL} (eval-defined)
26Var_Parse: ${ORIG_SHELL} (eval-defined) 26Var_Parse: ${ORIG_SHELL} (eval-defined)
27lhs = "(details omitted)", rhs = "(details omitted)", op = != 27Comparing "(details omitted)" != "(details omitted)"
28Parsing line 33: .MAKEFLAGS: -d0 28Parsing line 33: .MAKEFLAGS: -d0
29ParseDependency(.MAKEFLAGS: -d0) 29ParseDependency(.MAKEFLAGS: -d0)
30Global: .MAKEFLAGS = -r -k -d cpv -d 30Global: .MAKEFLAGS = -r -k -d cpv -d
31Global: .MAKEFLAGS = -r -k -d cpv -d 0 31Global: .MAKEFLAGS = -r -k -d cpv -d 0
32exit status 0 32exit status 0