Home | History | Annotate | Line # | Download | only in unit-tests
      1 # $NetBSD: var-op-append.mk,v 1.12 2023/11/02 05:46:26 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.
     21 VAR+=	one
     22 .if ${VAR} != "one"
     23 .  error
     24 .endif
     25 
     26 # Appending to an existing variable adds a single space and the value.
     27 VAR+=	two
     28 .if ${VAR} != "one two"
     29 .  error
     30 .endif
     31 
     32 # Appending an empty string nevertheless adds a single space.
     33 VAR+=	# 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, AdjustVarassignOp.
     43 C++=	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
     53 VAR.${:U\$\$\$\$\$\$\$\$}+=	dollars
     54 .MAKEFLAGS: -d0
     55 .if ${VAR.${:U\$\$\$\$\$\$\$\$}} != "dollars"
     56 .  error
     57 .endif
     58 
     59 
     60 # Appending to an environment variable in the global scope creates a global
     61 # variable of the same name, taking its initial value from the environment
     62 # variable.  After the assignment, the environment variable is left as-is,
     63 # the value of the global variable is not synced back to the environment
     64 # variable.
     65 export ENV_PLUS_GLOBAL=from-env-value
     66 ENV_PLUS_GLOBAL+=	appended-value
     67 .if ${ENV_PLUS_GLOBAL} != "from-env-value appended-value"
     68 .  error
     69 .endif
     70 EXPORTED!=	echo "$$ENV_PLUS_GLOBAL"
     71 .if ${EXPORTED} != "from-env-value"
     72 .  error
     73 .endif
     74 
     75 # Appending to an environment variable in the command line scope ignores the
     76 # environment variable.
     77 export ENV_PLUS_COMMAND=from-env-value
     78 .MAKEFLAGS: ENV_PLUS_COMMAND+=appended-command
     79 .if ${ENV_PLUS_COMMAND} != "appended-command"
     80 .  error ${ENV_PLUS_COMMAND}
     81 .endif
     82 EXPORTED!=	echo "$$ENV_PLUS_GLOBAL"
     83 .if ${EXPORTED} != "from-env-value"
     84 .  error
     85 .endif
     86 
     87 
     88 all:
     89