xref: /freebsd/contrib/bmake/unit-tests/var-op-append.mk (revision 7ef62cebc2f965b0f640263e179276928885e33d)
1# $NetBSD: var-op-append.mk,v 1.10 2023/06/21 07:30:50 rillig Exp $
2#
3# Tests for the '+=' variable assignment operator, which appends to a
4# variable, creating it if necessary.
5#
6# See also
7#	var-op.mk
8#
9# Standards
10#	The '+=' variable assignment operator is planned to be added in
11#	POSIX.1-202x.
12#
13#	This implementation does not support the immediate-expansion macros
14#	specified in POSIX.1-202x.  All variables are delayed-expansion.
15#
16# History
17#	The '+=' variable assignment operator was added before 1993-03-21.
18
19# Appending to an undefined variable is possible.
20# The variable is created, and no extra space is added before the value.
21VAR+=	one
22.if ${VAR} != "one"
23.  error
24.endif
25
26# Appending to an existing variable adds a single space and the value.
27VAR+=	two
28.if ${VAR} != "one two"
29.  error
30.endif
31
32# Appending an empty string nevertheless adds a single space.
33VAR+=	# empty
34.if ${VAR} != "one two "
35.  error
36.endif
37
38# Variable names may contain '+', and this character is also part of the
39# '+=' assignment operator.  As far as possible, the '+' is interpreted as
40# part of the assignment operator.
41#
42# See Parse_Var
43C++=	value
44.if ${C+} != "value" || defined(C++)
45.  error
46.endif
47
48# Before var.c 1.793 from 2021-02-03, the variable name of a newly created
49# variable was expanded two times in a row, which was unexpected but
50# irrelevant in practice since variable names containing dollars lead to
51# strange side effects in several other places as well.
52.MAKEFLAGS: -dv
53VAR.${:U\$\$\$\$\$\$\$\$}+=	dollars
54.MAKEFLAGS: -d0
55.if ${VAR.${:U\$\$\$\$\$\$\$\$}} != "dollars"
56.  error
57.endif
58
59all:
60