Home | History | Annotate | Line # | Download | only in unit-tests
      1 # $NetBSD: posix-varassign.mk,v 1.1 2025/04/13 09:29:33 rillig Exp $
      2 #
      3 # https://pubs.opengroup.org/onlinepubs/9799919799/utilities/make.html#tag_20_76_13_05
      4 #
      5 # Test that variable assignments work in the same way as in default mode.
      6 #
      7 # The assignment operators "::=" and ":::=" are intentionally not supported,
      8 # as they would introduce the distinction between eagerly and lazily evaluated
      9 # macros, in addition to the eagerly and lazily evaluated assignments, and
     10 # this would add too much complexity to the user's mental model, for too
     11 # little benefit.
     12 
     13 .POSIX:
     14 
     15 
     16 VAR=	value
     17 .if ${VAR} != "value"
     18 .  error
     19 .endif
     20 
     21 
     22 # Deviation from POSIX: The "::=" assignment operator is not supported,
     23 # instead, the variable named "VAR:" is defined.
     24 VAR=	before
     25 VAR::=	posix-immediate-expansion
     26 .if ${VAR} != "before"
     27 .  error
     28 .elif ${${:UVAR\:}} != "posix-immediate-expansion"
     29 .  error
     30 .endif
     31 
     32 
     33 # Deviation from POSIX: The ":::=" assignment operator is not supported,
     34 # instead, the variable named "VAR::" is defined.
     35 VAR:::=	posix-delayed-expansion
     36 .if ${VAR} != "before"
     37 .  error
     38 .elif ${${:UVAR\:\:}} != "posix-delayed-expansion"
     39 .  error
     40 .endif
     41 
     42 
     43 VAR!=	echo from shell command
     44 .if ${VAR} != "from shell command"
     45 .  error
     46 .endif
     47 
     48 
     49 VAR=	value
     50 VAR?=	fallback
     51 .if ${VAR} != "value"
     52 .  error
     53 .endif
     54 .undef VAR
     55 VAR?=	fallback
     56 .if ${VAR} != "fallback"
     57 .  error
     58 .endif
     59 
     60 
     61 VAR=	value
     62 VAR+=	appended
     63 .if ${VAR} != "value appended"
     64 .  error
     65 .endif
     66 
     67 
     68 # In POSIX mode, the ":=" assignment operator is available as well, even
     69 # though it is not specified by POSIX, due to the differences in existing
     70 # make implementations.
     71 REF=	before
     72 VAR:=	immediate ${REF}
     73 REF=	after
     74 .if ${VAR} != "immediate before"
     75 .  error
     76 .endif
     77 
     78 
     79 all:
     80