posix-varassign.mk revision 1.1 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