Home | History | Annotate | Line # | Download | only in unit-tests
      1  1.12  rillig # $NetBSD: var-op-append.mk,v 1.12 2023/11/02 05:46:26 rillig Exp $
      2   1.1  rillig #
      3  1.10  rillig # Tests for the '+=' variable assignment operator, which appends to a
      4  1.10  rillig # variable, creating it if necessary.
      5  1.10  rillig #
      6  1.10  rillig # See also
      7  1.10  rillig #	var-op.mk
      8  1.10  rillig #
      9  1.10  rillig # Standards
     10  1.10  rillig #	The '+=' variable assignment operator is planned to be added in
     11  1.10  rillig #	POSIX.1-202x.
     12  1.10  rillig #
     13  1.10  rillig #	This implementation does not support the immediate-expansion macros
     14  1.10  rillig #	specified in POSIX.1-202x.  All variables are delayed-expansion.
     15  1.10  rillig #
     16  1.10  rillig # History
     17  1.10  rillig #	The '+=' variable assignment operator was added before 1993-03-21.
     18   1.1  rillig 
     19   1.5  rillig # Appending to an undefined variable is possible.
     20   1.5  rillig # The variable is created, and no extra space is added before the value.
     21   1.5  rillig VAR+=	one
     22   1.5  rillig .if ${VAR} != "one"
     23   1.5  rillig .  error
     24   1.5  rillig .endif
     25   1.5  rillig 
     26   1.5  rillig # Appending to an existing variable adds a single space and the value.
     27   1.5  rillig VAR+=	two
     28   1.5  rillig .if ${VAR} != "one two"
     29   1.5  rillig .  error
     30   1.5  rillig .endif
     31   1.5  rillig 
     32   1.5  rillig # Appending an empty string nevertheless adds a single space.
     33   1.5  rillig VAR+=	# empty
     34   1.5  rillig .if ${VAR} != "one two "
     35   1.5  rillig .  error
     36   1.5  rillig .endif
     37   1.5  rillig 
     38   1.5  rillig # Variable names may contain '+', and this character is also part of the
     39   1.5  rillig # '+=' assignment operator.  As far as possible, the '+' is interpreted as
     40   1.5  rillig # part of the assignment operator.
     41   1.5  rillig #
     42  1.11  rillig # See Parse_Var, AdjustVarassignOp.
     43   1.6  rillig C++=	value
     44   1.5  rillig .if ${C+} != "value" || defined(C++)
     45   1.5  rillig .  error
     46   1.5  rillig .endif
     47   1.1  rillig 
     48   1.8  rillig # Before var.c 1.793 from 2021-02-03, the variable name of a newly created
     49   1.8  rillig # variable was expanded two times in a row, which was unexpected but
     50   1.8  rillig # irrelevant in practice since variable names containing dollars lead to
     51   1.8  rillig # strange side effects in several other places as well.
     52   1.7  rillig .MAKEFLAGS: -dv
     53   1.7  rillig VAR.${:U\$\$\$\$\$\$\$\$}+=	dollars
     54   1.7  rillig .MAKEFLAGS: -d0
     55   1.8  rillig .if ${VAR.${:U\$\$\$\$\$\$\$\$}} != "dollars"
     56   1.7  rillig .  error
     57   1.7  rillig .endif
     58   1.7  rillig 
     59  1.12  rillig 
     60  1.12  rillig # Appending to an environment variable in the global scope creates a global
     61  1.12  rillig # variable of the same name, taking its initial value from the environment
     62  1.12  rillig # variable.  After the assignment, the environment variable is left as-is,
     63  1.12  rillig # the value of the global variable is not synced back to the environment
     64  1.12  rillig # variable.
     65  1.12  rillig export ENV_PLUS_GLOBAL=from-env-value
     66  1.12  rillig ENV_PLUS_GLOBAL+=	appended-value
     67  1.12  rillig .if ${ENV_PLUS_GLOBAL} != "from-env-value appended-value"
     68  1.12  rillig .  error
     69  1.12  rillig .endif
     70  1.12  rillig EXPORTED!=	echo "$$ENV_PLUS_GLOBAL"
     71  1.12  rillig .if ${EXPORTED} != "from-env-value"
     72  1.12  rillig .  error
     73  1.12  rillig .endif
     74  1.12  rillig 
     75  1.12  rillig # Appending to an environment variable in the command line scope ignores the
     76  1.12  rillig # environment variable.
     77  1.12  rillig export ENV_PLUS_COMMAND=from-env-value
     78  1.12  rillig .MAKEFLAGS: ENV_PLUS_COMMAND+=appended-command
     79  1.12  rillig .if ${ENV_PLUS_COMMAND} != "appended-command"
     80  1.12  rillig .  error ${ENV_PLUS_COMMAND}
     81  1.12  rillig .endif
     82  1.12  rillig EXPORTED!=	echo "$$ENV_PLUS_GLOBAL"
     83  1.12  rillig .if ${EXPORTED} != "from-env-value"
     84  1.12  rillig .  error
     85  1.12  rillig .endif
     86  1.12  rillig 
     87  1.12  rillig 
     88   1.1  rillig all:
     89