1 1.7 rillig # $NetBSD: var-op-append.mk,v 1.7 2020/10/30 20:36:33 rillig Exp $ 2 1.1 rillig # 3 1.2 rillig # Tests for the += variable assignment operator, which appends to a variable, 4 1.2 rillig # creating it if necessary. 5 1.1 rillig 6 1.5 rillig # Appending to an undefined variable is possible. 7 1.5 rillig # The variable is created, and no extra space is added before the value. 8 1.5 rillig VAR+= one 9 1.5 rillig .if ${VAR} != "one" 10 1.5 rillig . error 11 1.5 rillig .endif 12 1.5 rillig 13 1.5 rillig # Appending to an existing variable adds a single space and the value. 14 1.5 rillig VAR+= two 15 1.5 rillig .if ${VAR} != "one two" 16 1.5 rillig . error 17 1.5 rillig .endif 18 1.5 rillig 19 1.5 rillig # Appending an empty string nevertheless adds a single space. 20 1.5 rillig VAR+= # empty 21 1.5 rillig .if ${VAR} != "one two " 22 1.5 rillig . error 23 1.5 rillig .endif 24 1.5 rillig 25 1.5 rillig # Variable names may contain '+', and this character is also part of the 26 1.5 rillig # '+=' assignment operator. As far as possible, the '+' is interpreted as 27 1.5 rillig # part of the assignment operator. 28 1.5 rillig # 29 1.5 rillig # See Parse_DoVar 30 1.6 rillig C++= value 31 1.5 rillig .if ${C+} != "value" || defined(C++) 32 1.5 rillig . error 33 1.5 rillig .endif 34 1.1 rillig 35 1.7 rillig # Try out how often the variable name is expanded when appending to a 36 1.7 rillig # nonexistent variable. 37 1.7 rillig # As of 2020-10-30, that's two times. 38 1.7 rillig # XXX: That's one time too often. 39 1.7 rillig # See Var_Append, the call to Var_Set. 40 1.7 rillig .MAKEFLAGS: -dv 41 1.7 rillig VAR.${:U\$\$\$\$\$\$\$\$}+= dollars 42 1.7 rillig .MAKEFLAGS: -d0 43 1.7 rillig .if ${VAR.${:U\$\$\$\$}} != "dollars" 44 1.7 rillig . error 45 1.7 rillig .endif 46 1.7 rillig 47 1.1 rillig all: 48 1.1 rillig @:; 49