xref: /freebsd/contrib/bmake/unit-tests/var-op-append.mk (revision d485c77f203fb0f4cdc08dea5ff81631b51d8809)
1# $NetBSD: var-op-append.mk,v 1.8 2021/02/03 08:40:47 rillig Exp $
2#
3# Tests for the += variable assignment operator, which appends to a variable,
4# creating it if necessary.
5
6# Appending to an undefined variable is possible.
7# The variable is created, and no extra space is added before the value.
8VAR+=	one
9.if ${VAR} != "one"
10.  error
11.endif
12
13# Appending to an existing variable adds a single space and the value.
14VAR+=	two
15.if ${VAR} != "one two"
16.  error
17.endif
18
19# Appending an empty string nevertheless adds a single space.
20VAR+=	# empty
21.if ${VAR} != "one two "
22.  error
23.endif
24
25# Variable names may contain '+', and this character is also part of the
26# '+=' assignment operator.  As far as possible, the '+' is interpreted as
27# part of the assignment operator.
28#
29# See Parse_DoVar
30C++=	value
31.if ${C+} != "value" || defined(C++)
32.  error
33.endif
34
35# Before var.c 1.793 from 2021-02-03, the variable name of a newly created
36# variable was expanded two times in a row, which was unexpected but
37# irrelevant in practice since variable names containing dollars lead to
38# strange side effects in several other places as well.
39.MAKEFLAGS: -dv
40VAR.${:U\$\$\$\$\$\$\$\$}+=	dollars
41.MAKEFLAGS: -d0
42.if ${VAR.${:U\$\$\$\$\$\$\$\$}} != "dollars"
43.  error
44.endif
45
46all:
47