Module Name: src
Committed By: rillig
Date: Sun Oct 4 06:53:15 UTC 2020
Modified Files:
src/distrib/sets/lists/tests: mi
src/usr.bin/make/unit-tests: Makefile
Added Files:
src/usr.bin/make/unit-tests: parse-var.exp parse-var.mk
var-op-sunsh.exp var-op-sunsh.mk
Log Message:
make(1): add tests for parsing assignments, especially :sh
Luckily nobody uses the :sh variable assignment modifier since its
syntactical variant != is simpler.
To generate a diff of this commit:
cvs rdiff -u -r1.937 -r1.938 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.159 -r1.160 src/usr.bin/make/unit-tests/Makefile
cvs rdiff -u -r0 -r1.1 src/usr.bin/make/unit-tests/parse-var.exp \
src/usr.bin/make/unit-tests/parse-var.mk \
src/usr.bin/make/unit-tests/var-op-sunsh.exp \
src/usr.bin/make/unit-tests/var-op-sunsh.mk
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.937 src/distrib/sets/lists/tests/mi:1.938
--- src/distrib/sets/lists/tests/mi:1.937 Sat Oct 3 20:34:06 2020
+++ src/distrib/sets/lists/tests/mi Sun Oct 4 06:53:15 2020
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.937 2020/10/03 20:34:06 rillig Exp $
+# $NetBSD: mi,v 1.938 2020/10/04 06:53:15 rillig Exp $
#
# Note: don't delete entries from here - mark them as "obsolete" instead.
#
@@ -4945,6 +4945,8 @@
./usr/tests/usr.bin/make/unit-tests/opt.mk tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/order.exp tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/order.mk tests-usr.bin-tests compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/parse-var.exp tests-usr.bin-tests compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/parse-var.mk tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/phony-end.exp tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/phony-end.mk tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/posix.exp tests-usr.bin-tests compattestfile,atf
@@ -5021,6 +5023,8 @@
./usr/tests/usr.bin/make/unit-tests/var-op-expand.mk tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/var-op-shell.exp tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/var-op-shell.mk tests-usr.bin-tests compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/var-op-sunsh.exp tests-usr.bin-tests compattestfile,atf
+./usr/tests/usr.bin/make/unit-tests/var-op-sunsh.mk tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/var-op.exp tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/var-op.mk tests-usr.bin-tests compattestfile,atf
./usr/tests/usr.bin/make/unit-tests/varcmd.exp tests-usr.bin-tests compattestfile,atf
Index: src/usr.bin/make/unit-tests/Makefile
diff -u src/usr.bin/make/unit-tests/Makefile:1.159 src/usr.bin/make/unit-tests/Makefile:1.160
--- src/usr.bin/make/unit-tests/Makefile:1.159 Sat Oct 3 17:30:54 2020
+++ src/usr.bin/make/unit-tests/Makefile Sun Oct 4 06:53:15 2020
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.159 2020/10/03 17:30:54 rillig Exp $
+# $NetBSD: Makefile,v 1.160 2020/10/04 06:53:15 rillig Exp $
#
# Unit tests for make(1)
#
@@ -230,6 +230,7 @@ TESTS+= opt-warnings-as-errors
TESTS+= opt-where-am-i
TESTS+= opt-x-reduce-exported
TESTS+= order
+TESTS+= parse-var
TESTS+= phony-end
TESTS+= posix
TESTS+= # posix1 # broken by reverting POSIX changes
@@ -269,6 +270,7 @@ TESTS+= var-op-assign
TESTS+= var-op-default
TESTS+= var-op-expand
TESTS+= var-op-shell
+TESTS+= var-op-sunsh
TESTS+= varcmd
TESTS+= vardebug
TESTS+= varfind
Added files:
Index: src/usr.bin/make/unit-tests/parse-var.exp
diff -u /dev/null src/usr.bin/make/unit-tests/parse-var.exp:1.1
--- /dev/null Sun Oct 4 06:53:16 2020
+++ src/usr.bin/make/unit-tests/parse-var.exp Sun Oct 4 06:53:15 2020
@@ -0,0 +1 @@
+exit status 0
Index: src/usr.bin/make/unit-tests/parse-var.mk
diff -u /dev/null src/usr.bin/make/unit-tests/parse-var.mk:1.1
--- /dev/null Sun Oct 4 06:53:16 2020
+++ src/usr.bin/make/unit-tests/parse-var.mk Sun Oct 4 06:53:15 2020
@@ -0,0 +1,13 @@
+# $NetBSD: parse-var.mk,v 1.1 2020/10/04 06:53:15 rillig Exp $
+
+.MAKEFLAGS: -dL
+
+# In variable assignments, there may be spaces on the left-hand side of the
+# assignment, but only if they occur inside variable expressions.
+VAR.${:U param }= value
+.if ${VAR.${:U param }} != "value"
+. error
+.endif
+
+all:
+ @:;
Index: src/usr.bin/make/unit-tests/var-op-sunsh.exp
diff -u /dev/null src/usr.bin/make/unit-tests/var-op-sunsh.exp:1.1
--- /dev/null Sun Oct 4 06:53:16 2020
+++ src/usr.bin/make/unit-tests/var-op-sunsh.exp Sun Oct 4 06:53:15 2020
@@ -0,0 +1,3 @@
+make: Unclosed variable specification (expecting '}') for "" (value "echo 123") modifier U
+make: Unclosed variable specification (expecting '}') for "" (value " echo\") modifier U
+exit status 0
Index: src/usr.bin/make/unit-tests/var-op-sunsh.mk
diff -u /dev/null src/usr.bin/make/unit-tests/var-op-sunsh.mk:1.1
--- /dev/null Sun Oct 4 06:53:16 2020
+++ src/usr.bin/make/unit-tests/var-op-sunsh.mk Sun Oct 4 06:53:15 2020
@@ -0,0 +1,66 @@
+# $NetBSD: var-op-sunsh.mk,v 1.1 2020/10/04 06:53:15 rillig Exp $
+#
+# Tests for the :sh= variable assignment operator, which runs its right-hand
+# side through the shell. It is a seldom-used alternative to the !=
+# assignment operator.
+
+.MAKEFLAGS: -dL # Enable sane error messages
+
+# This is the idiomatic form of the Sun shell assignment operator.
+# The assignment operator is directly preceded by the ':sh'.
+VAR:sh= echo colon-sh
+.if ${VAR} != "colon-sh"
+. error
+.endif
+
+# XXX: As of 2020-10-04, the ':sh' can even be followed by other characters.
+# This is neither documented by NetBSD make nor by Solaris make.
+VAR:shell= echo colon-shell
+.if ${VAR} != "colon-shell"
+. error
+.endif
+
+# XXX: Several colons can syntactically appear in a variable name.
+# Neither of these should be interpreted as the ':sh' assignment operator
+# modifier.
+VAR:shoe:shore= echo two-colons
+.if ${VAR${:U\:}shoe} != "two-colons"
+. error
+.endif
+
+#.MAKEFLAGS: -dcpv
+
+# XXX: As of 2020-10-04, the following expression is wrongly marked as
+# a parse error. This is caused by the ':sh' modifier.
+#
+# There are two different syntactical elements that look exactly the same:
+# The variable modifier ':sh' and the assignment operator modifier ':sh'.
+# Intuitively this variable name contains the variable modifier, but the
+# parser sees it as operator modifier, in Parse_DoVar.
+#
+VAR.${:Uecho 123:sh}= echo oops
+.if ${VAR.echo 123} != "oops"
+. error
+.endif
+
+# XXX: Same pattern here. The ':sh' inside the nested expression is taken
+# for the assignment operator, even though it is escaped by a backslash.
+#
+VAR.${:U echo\:shell}= echo oops
+.if ${VAR.${:U echo\\}} != "oops"
+. error
+.endif
+
+# XXX: The word 'shift' is also affected since it starts with ':sh'.
+#
+VAR.key:shift= echo Shift
+.if ${VAR.key} != "Shift"
+. error
+.endif
+
+.MAKEFLAGS: -d0
+
+# XXX: Despite the error messages the exit status is still 0.
+
+all:
+ @:;