Module Name:    src
Committed By:   rillig
Date:           Thu Jan 21 00:38:28 UTC 2021

Modified Files:
        src/usr.bin/make/unit-tests: cond-token-plain.exp cond-token-plain.mk
            cond-token-string.exp cond-token-string.mk

Log Message:
make(1): add more tests for tokens in conditionals


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/cond-token-plain.exp \
    src/usr.bin/make/unit-tests/cond-token-string.mk
cvs rdiff -u -r1.6 -r1.7 src/usr.bin/make/unit-tests/cond-token-plain.mk
cvs rdiff -u -r1.4 -r1.5 src/usr.bin/make/unit-tests/cond-token-string.exp

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/unit-tests/cond-token-plain.exp
diff -u src/usr.bin/make/unit-tests/cond-token-plain.exp:1.3 src/usr.bin/make/unit-tests/cond-token-plain.exp:1.4
--- src/usr.bin/make/unit-tests/cond-token-plain.exp:1.3	Sat Sep 12 17:47:24 2020
+++ src/usr.bin/make/unit-tests/cond-token-plain.exp	Thu Jan 21 00:38:28 2021
@@ -26,4 +26,16 @@ CondParser_Eval: ${:Uvar}&&name != "var&
 lhs = "var&&name", rhs = "var&&name", op = !=
 CondParser_Eval: ${:Uvar}||name != "var||name"
 lhs = "var||name", rhs = "var||name", op = !=
+CondParser_Eval: bare
+make: "cond-token-plain.mk" line 102: A bare word is treated like defined(...), and the variable 'bare' is not defined.
+CondParser_Eval: VAR
+make: "cond-token-plain.mk" line 107: A bare word is treated like defined(...).
+CondParser_Eval: V${:UA}R
+make: "cond-token-plain.mk" line 114: ok
+CondParser_Eval: V${UNDEF}AR
+make: "cond-token-plain.mk" line 122: Undefined variables in bare words expand to an empty string.
+CondParser_Eval: 0${:Ux00}
+make: "cond-token-plain.mk" line 130: Numbers can be composed from literals and variable expressions.
+CondParser_Eval: 0${:Ux01}
+make: "cond-token-plain.mk" line 134: Numbers can be composed from literals and variable expressions.
 exit status 0
Index: src/usr.bin/make/unit-tests/cond-token-string.mk
diff -u src/usr.bin/make/unit-tests/cond-token-string.mk:1.3 src/usr.bin/make/unit-tests/cond-token-string.mk:1.4
--- src/usr.bin/make/unit-tests/cond-token-string.mk:1.3	Tue Nov 10 22:23:37 2020
+++ src/usr.bin/make/unit-tests/cond-token-string.mk	Thu Jan 21 00:38:28 2021
@@ -1,6 +1,10 @@
-# $NetBSD: cond-token-string.mk,v 1.3 2020/11/10 22:23:37 rillig Exp $
+# $NetBSD: cond-token-string.mk,v 1.4 2021/01/21 00:38:28 rillig Exp $
 #
-# Tests for quoted and unquoted string literals in .if conditions.
+# Tests for quoted string literals in .if conditions.
+#
+# See also:
+#	cond-token-plain.mk
+#		Covers string literals without quotes (called "bare words").
 
 # TODO: Implementation
 
@@ -35,5 +39,44 @@
 .  error
 .endif
 
+.MAKEFLAGS: -dc
+
+# A string in quotes is checked whether it is not empty.
+.if "UNDEF"
+.  info The string literal "UNDEF" is not empty.
+.else
+.  error
+.endif
+
+# A space is not empty as well.
+# This differs from many other places where whitespace is trimmed.
+.if " "
+.  info The string literal " " is not empty, even though it consists of $\
+	whitespace only.
+.else
+.  error
+.endif
+
+.if "${UNDEF}"
+.  error
+.else
+.  info An undefined variable in quotes expands to an empty string, which $\
+	then evaluates to false.
+.endif
+
+.if "${:Uvalue}"
+.  info A nonempty variable expression evaluates to true.
+.else
+.  error
+.endif
+
+.if "${:U}"
+.  error
+.else
+.  info An empty variable evaluates to false.
+.endif
+
+.MAKEFLAGS: -d0
+
 all:
 	@:;

Index: src/usr.bin/make/unit-tests/cond-token-plain.mk
diff -u src/usr.bin/make/unit-tests/cond-token-plain.mk:1.6 src/usr.bin/make/unit-tests/cond-token-plain.mk:1.7
--- src/usr.bin/make/unit-tests/cond-token-plain.mk:1.6	Sun Nov 15 14:58:14 2020
+++ src/usr.bin/make/unit-tests/cond-token-plain.mk	Thu Jan 21 00:38:28 2021
@@ -1,4 +1,4 @@
-# $NetBSD: cond-token-plain.mk,v 1.6 2020/11/15 14:58:14 rillig Exp $
+# $NetBSD: cond-token-plain.mk,v 1.7 2021/01/21 00:38:28 rillig Exp $
 #
 # Tests for plain tokens (that is, string literals without quotes)
 # in .if conditions.
@@ -93,5 +93,51 @@
 .  error
 .endif
 
+# A bare word may appear alone in a condition, without any comparison
+# operator.  It is implicitly converted into defined(bare).
+.if bare
+.  error
+.else
+.  info A bare word is treated like defined(...), and the variable $\
+	'bare' is not defined.
+.endif
+
+VAR=	defined
+.if VAR
+.  info A bare word is treated like defined(...).
+.else
+.  error
+.endif
+
+# Bare words may be intermixed with variable expressions.
+.if V${:UA}R
+.  info ok
+.else
+.  error
+.endif
+
+# In bare words, even undefined variables are allowed.  Without the bare
+# words, undefined variables are not allowed.  That feels inconsistent.
+.if V${UNDEF}AR
+.  info Undefined variables in bare words expand to an empty string.
+.else
+.  error
+.endif
+
+.if 0${:Ux00}
+.  error
+.else
+.  info Numbers can be composed from literals and variable expressions.
+.endif
+
+.if 0${:Ux01}
+.  info Numbers can be composed from literals and variable expressions.
+.else
+.  error
+.endif
+
+# See cond-token-string.mk for similar tests where the condition is enclosed
+# in "quotes".
+
 all:
 	@:;

Index: src/usr.bin/make/unit-tests/cond-token-string.exp
diff -u src/usr.bin/make/unit-tests/cond-token-string.exp:1.4 src/usr.bin/make/unit-tests/cond-token-string.exp:1.5
--- src/usr.bin/make/unit-tests/cond-token-string.exp:1.4	Sun Dec 20 19:47:34 2020
+++ src/usr.bin/make/unit-tests/cond-token-string.exp	Thu Jan 21 00:38:28 2021
@@ -1,8 +1,18 @@
-make: "cond-token-string.mk" line 9: Unknown modifier 'Z'
-make: "cond-token-string.mk" line 9: Malformed conditional ("" != "${:Uvalue:Z}")
-make: "cond-token-string.mk" line 18: xvalue is not defined.
-make: "cond-token-string.mk" line 24: Malformed conditional (x${:Uvalue} == "")
-make: "cond-token-string.mk" line 33: Expected.
+make: "cond-token-string.mk" line 13: Unknown modifier 'Z'
+make: "cond-token-string.mk" line 13: Malformed conditional ("" != "${:Uvalue:Z}")
+make: "cond-token-string.mk" line 22: xvalue is not defined.
+make: "cond-token-string.mk" line 28: Malformed conditional (x${:Uvalue} == "")
+make: "cond-token-string.mk" line 37: Expected.
+CondParser_Eval: "UNDEF"
+make: "cond-token-string.mk" line 46: The string literal "UNDEF" is not empty.
+CondParser_Eval: " "
+make: "cond-token-string.mk" line 55: The string literal " " is not empty, even though it consists of whitespace only.
+CondParser_Eval: "${UNDEF}"
+make: "cond-token-string.mk" line 64: An undefined variable in quotes expands to an empty string, which then evaluates to false.
+CondParser_Eval: "${:Uvalue}"
+make: "cond-token-string.mk" line 68: A nonempty variable expression evaluates to true.
+CondParser_Eval: "${:U}"
+make: "cond-token-string.mk" line 76: An empty variable evaluates to false.
 make: Fatal errors encountered -- cannot continue
 make: stopped in unit-tests
 exit status 1

Reply via email to