varmod-select-words.mk revision 1.5 1 1.5 rillig # $NetBSD: varmod-select-words.mk,v 1.5 2024/07/20 11:05:12 rillig Exp $
2 1.1 rillig #
3 1.2 rillig # Tests for the :[...] variable modifier, which selects a single word
4 1.2 rillig # or a range of words from a variable.
5 1.3 rillig #
6 1.4 rillig # History:
7 1.4 rillig # The variable modifier ':[...]' was added on 2003-09-27.
8 1.4 rillig #
9 1.3 rillig # See also:
10 1.3 rillig # modword.mk (should be migrated here)
11 1.1 rillig
12 1.4 rillig all: mod-squarebrackets mod-S-W mod-C-W mod-tW-tw
13 1.4 rillig
14 1.4 rillig LIST= one two three four five six
15 1.4 rillig LONGLIST= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
16 1.4 rillig
17 1.4 rillig EMPTY= # the space should be ignored
18 1.4 rillig ESCAPEDSPACE= \ # escaped space before the '#', the actual value is '\ '
19 1.4 rillig REALLYSPACE:= ${:U }
20 1.4 rillig HASH= \#
21 1.4 rillig AT= @
22 1.4 rillig STAR= *
23 1.4 rillig ZERO= 0
24 1.4 rillig ONE= 1
25 1.4 rillig MINUSONE= -1
26 1.4 rillig
27 1.5 rillig mod-squarebrackets: \
28 1.5 rillig mod-squarebrackets-empty \
29 1.5 rillig mod-squarebrackets-0-star-at \
30 1.4 rillig mod-squarebrackets-hash \
31 1.5 rillig mod-squarebrackets-n-ok-1 \
32 1.5 rillig mod-squarebrackets-n-error-1 \
33 1.5 rillig mod-squarebrackets-n-error-2 \
34 1.5 rillig mod-squarebrackets-n-ok-2 \
35 1.5 rillig mod-squarebrackets-n-error-3 \
36 1.5 rillig mod-squarebrackets-n-error-4 \
37 1.5 rillig mod-squarebrackets-n-ok-3 \
38 1.5 rillig mod-squarebrackets-start-end-error-1 \
39 1.5 rillig mod-squarebrackets-start-end-error-2 \
40 1.5 rillig mod-squarebrackets-start-end-error-3 \
41 1.5 rillig mod-squarebrackets-start-end-ok-1 \
42 1.5 rillig mod-squarebrackets-start-end-error-4 \
43 1.5 rillig mod-squarebrackets-start-end-ok-2 \
44 1.5 rillig mod-squarebrackets-start-end-error-5 \
45 1.5 rillig mod-squarebrackets-start-end-error-6 \
46 1.5 rillig mod-squarebrackets-start-end-ok-3 \
47 1.5 rillig mod-squarebrackets-nested-ok-1 \
48 1.5 rillig mod-squarebrackets-nested-error-1 \
49 1.5 rillig mod-squarebrackets-nested-ok-2 \
50 1.4 rillig mod-squarebrackets-space
51 1.4 rillig
52 1.5 rillig mod-squarebrackets-empty:
53 1.5 rillig # expect: make: in target "mod-squarebrackets-empty": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[]"
54 1.5 rillig @echo 'LIST:[]="${LIST:[]}" is an error'
55 1.5 rillig
56 1.4 rillig mod-squarebrackets-0-star-at:
57 1.4 rillig @echo 'LIST:[0]="${LIST:[0]}"'
58 1.4 rillig @echo 'LIST:[0x0]="${LIST:[0x0]}"'
59 1.4 rillig @echo 'LIST:[000]="${LIST:[000]}"'
60 1.4 rillig @echo 'LIST:[*]="${LIST:[*]}"'
61 1.4 rillig @echo 'LIST:[@]="${LIST:[@]}"'
62 1.4 rillig @echo 'LIST:[0]:C/ /,/="${LIST:[0]:C/ /,/}"'
63 1.4 rillig @echo 'LIST:[0]:C/ /,/g="${LIST:[0]:C/ /,/g}"'
64 1.4 rillig @echo 'LIST:[0]:C/ /,/1g="${LIST:[0]:C/ /,/1g}"'
65 1.4 rillig @echo 'LIST:[*]:C/ /,/="${LIST:[*]:C/ /,/}"'
66 1.4 rillig @echo 'LIST:[*]:C/ /,/g="${LIST:[*]:C/ /,/g}"'
67 1.4 rillig @echo 'LIST:[*]:C/ /,/1g="${LIST:[*]:C/ /,/1g}"'
68 1.4 rillig @echo 'LIST:[@]:C/ /,/="${LIST:[@]:C/ /,/}"'
69 1.4 rillig @echo 'LIST:[@]:C/ /,/g="${LIST:[@]:C/ /,/g}"'
70 1.4 rillig @echo 'LIST:[@]:C/ /,/1g="${LIST:[@]:C/ /,/1g}"'
71 1.4 rillig @echo 'LIST:[@]:[0]:C/ /,/="${LIST:[@]:[0]:C/ /,/}"'
72 1.4 rillig @echo 'LIST:[0]:[@]:C/ /,/="${LIST:[0]:[@]:C/ /,/}"'
73 1.4 rillig @echo 'LIST:[@]:[*]:C/ /,/="${LIST:[@]:[*]:C/ /,/}"'
74 1.4 rillig @echo 'LIST:[*]:[@]:C/ /,/="${LIST:[*]:[@]:C/ /,/}"'
75 1.4 rillig
76 1.4 rillig mod-squarebrackets-hash:
77 1.4 rillig @echo 'EMPTY="${EMPTY}"'
78 1.4 rillig @echo 'EMPTY:[#]="${EMPTY:[#]}" == 1 ?'
79 1.4 rillig @echo 'ESCAPEDSPACE="${ESCAPEDSPACE}"'
80 1.4 rillig @echo 'ESCAPEDSPACE:[#]="${ESCAPEDSPACE:[#]}" == 1 ?'
81 1.4 rillig @echo 'REALLYSPACE="${REALLYSPACE}"'
82 1.4 rillig @echo 'REALLYSPACE:[#]="${REALLYSPACE:[#]}" == 1 ?'
83 1.4 rillig @echo 'LIST:[#]="${LIST:[#]}"'
84 1.4 rillig @echo 'LIST:[0]:[#]="${LIST:[0]:[#]}" == 1 ?'
85 1.4 rillig @echo 'LIST:[*]:[#]="${LIST:[*]:[#]}" == 1 ?'
86 1.4 rillig @echo 'LIST:[@]:[#]="${LIST:[@]:[#]}"'
87 1.4 rillig @echo 'LIST:[1]:[#]="${LIST:[1]:[#]}"'
88 1.4 rillig @echo 'LIST:[1..3]:[#]="${LIST:[1..3]:[#]}"'
89 1.4 rillig
90 1.5 rillig mod-squarebrackets-n-ok-1:
91 1.4 rillig @echo 'EMPTY:[1]="${EMPTY:[1]}"'
92 1.4 rillig @echo 'ESCAPEDSPACE="${ESCAPEDSPACE}"'
93 1.4 rillig @echo 'ESCAPEDSPACE:[1]="${ESCAPEDSPACE:[1]}"'
94 1.4 rillig @echo 'REALLYSPACE="${REALLYSPACE}"'
95 1.4 rillig @echo 'REALLYSPACE:[1]="${REALLYSPACE:[1]}" == "" ?'
96 1.4 rillig @echo 'REALLYSPACE:[*]:[1]="${REALLYSPACE:[*]:[1]}" == " " ?'
97 1.4 rillig @echo 'LIST:[1]="${LIST:[1]}"'
98 1.5 rillig mod-squarebrackets-n-error-1:
99 1.5 rillig # expect: make: in target "mod-squarebrackets-n-error-1": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[1.]"
100 1.4 rillig @echo 'LIST:[1.]="${LIST:[1.]}" is an error'
101 1.5 rillig mod-squarebrackets-n-error-2:
102 1.5 rillig # expect: make: in target "mod-squarebrackets-n-error-2": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[1]."
103 1.4 rillig @echo 'LIST:[1].="${LIST:[1].}" is an error'
104 1.5 rillig mod-squarebrackets-n-ok-2:
105 1.4 rillig @echo 'LIST:[2]="${LIST:[2]}"'
106 1.4 rillig @echo 'LIST:[6]="${LIST:[6]}"'
107 1.4 rillig @echo 'LIST:[7]="${LIST:[7]}"'
108 1.4 rillig @echo 'LIST:[999]="${LIST:[999]}"'
109 1.5 rillig mod-squarebrackets-n-error-3:
110 1.5 rillig # expect: make: in target "mod-squarebrackets-n-error-3": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[-]"
111 1.4 rillig @echo 'LIST:[-]="${LIST:[-]}" is an error'
112 1.5 rillig mod-squarebrackets-n-error-4:
113 1.5 rillig # expect: make: in target "mod-squarebrackets-n-error-4": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[--]"
114 1.4 rillig @echo 'LIST:[--]="${LIST:[--]}" is an error'
115 1.5 rillig mod-squarebrackets-n-ok-3:
116 1.4 rillig @echo 'LIST:[-1]="${LIST:[-1]}"'
117 1.4 rillig @echo 'LIST:[-2]="${LIST:[-2]}"'
118 1.4 rillig @echo 'LIST:[-6]="${LIST:[-6]}"'
119 1.4 rillig @echo 'LIST:[-7]="${LIST:[-7]}"'
120 1.4 rillig @echo 'LIST:[-999]="${LIST:[-999]}"'
121 1.4 rillig @echo 'LONGLIST:[17]="${LONGLIST:[17]}"'
122 1.4 rillig @echo 'LONGLIST:[0x11]="${LONGLIST:[0x11]}"'
123 1.4 rillig @echo 'LONGLIST:[021]="${LONGLIST:[021]}"'
124 1.4 rillig @echo 'LIST:[0]:[1]="${LIST:[0]:[1]}"'
125 1.4 rillig @echo 'LIST:[*]:[1]="${LIST:[*]:[1]}"'
126 1.4 rillig @echo 'LIST:[@]:[1]="${LIST:[@]:[1]}"'
127 1.4 rillig @echo 'LIST:[0]:[2]="${LIST:[0]:[2]}"'
128 1.4 rillig @echo 'LIST:[*]:[2]="${LIST:[*]:[2]}"'
129 1.4 rillig @echo 'LIST:[@]:[2]="${LIST:[@]:[2]}"'
130 1.4 rillig @echo 'LIST:[*]:C/ /,/:[2]="${LIST:[*]:C/ /,/:[2]}"'
131 1.4 rillig @echo 'LIST:[*]:C/ /,/:[*]:[2]="${LIST:[*]:C/ /,/:[*]:[2]}"'
132 1.4 rillig @echo 'LIST:[*]:C/ /,/:[@]:[2]="${LIST:[*]:C/ /,/:[@]:[2]}"'
133 1.4 rillig @echo 'LONGLIST:[012..0x12]="${LONGLIST:[012..0x12]}"'
134 1.4 rillig
135 1.5 rillig mod-squarebrackets-start-end-error-1:
136 1.5 rillig # expect: make: in target "mod-squarebrackets-start-end-error-1": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[1.]"
137 1.4 rillig @echo 'LIST:[1.]="${LIST:[1.]}" is an error'
138 1.5 rillig mod-squarebrackets-start-end-error-2:
139 1.5 rillig # expect: make: in target "mod-squarebrackets-start-end-error-2": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[1..]"
140 1.4 rillig @echo 'LIST:[1..]="${LIST:[1..]}" is an error'
141 1.5 rillig mod-squarebrackets-start-end-error-3:
142 1.5 rillig # expect: make: in target "mod-squarebrackets-start-end-error-3": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[1.. ]"
143 1.4 rillig @echo 'LIST:[1.. ]="${LIST:[1.. ]}" is an error'
144 1.5 rillig mod-squarebrackets-start-end-ok-1:
145 1.4 rillig @echo 'LIST:[1..1]="${LIST:[1..1]}"'
146 1.5 rillig mod-squarebrackets-start-end-error-4:
147 1.5 rillig # expect: make: in target "mod-squarebrackets-start-end-error-4": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[1..1.]"
148 1.4 rillig @echo 'LIST:[1..1.]="${LIST:[1..1.]}" is an error'
149 1.5 rillig mod-squarebrackets-start-end-ok-2:
150 1.4 rillig @echo 'LIST:[1..2]="${LIST:[1..2]}"'
151 1.4 rillig @echo 'LIST:[2..1]="${LIST:[2..1]}"'
152 1.4 rillig @echo 'LIST:[3..-2]="${LIST:[3..-2]}"'
153 1.4 rillig @echo 'LIST:[-4..4]="${LIST:[-4..4]}"'
154 1.5 rillig mod-squarebrackets-start-end-error-5:
155 1.5 rillig # expect: make: in target "mod-squarebrackets-start-end-error-5": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[0..1]"
156 1.4 rillig @echo 'LIST:[0..1]="${LIST:[0..1]}" is an error'
157 1.5 rillig mod-squarebrackets-start-end-error-6:
158 1.5 rillig # expect: make: in target "mod-squarebrackets-start-end-error-6": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[-1..0]"
159 1.4 rillig @echo 'LIST:[-1..0]="${LIST:[-1..0]}" is an error'
160 1.5 rillig mod-squarebrackets-start-end-ok-3:
161 1.4 rillig @echo 'LIST:[-1..1]="${LIST:[-1..1]}"'
162 1.4 rillig @echo 'LIST:[0..0]="${LIST:[0..0]}"'
163 1.4 rillig @echo 'LIST:[3..99]="${LIST:[3..99]}"'
164 1.4 rillig @echo 'LIST:[-3..-99]="${LIST:[-3..-99]}"'
165 1.4 rillig @echo 'LIST:[-99..-3]="${LIST:[-99..-3]}"'
166 1.4 rillig
167 1.5 rillig mod-squarebrackets-nested-ok-1:
168 1.4 rillig @echo 'HASH="${HASH}" == "#" ?'
169 1.4 rillig @echo 'LIST:[$${HASH}]="${LIST:[${HASH}]}"'
170 1.4 rillig @echo 'LIST:[$${ZERO}]="${LIST:[${ZERO}]}"'
171 1.4 rillig @echo 'LIST:[$${ZERO}x$${ONE}]="${LIST:[${ZERO}x${ONE}]}"'
172 1.4 rillig @echo 'LIST:[$${ONE}]="${LIST:[${ONE}]}"'
173 1.4 rillig @echo 'LIST:[$${MINUSONE}]="${LIST:[${MINUSONE}]}"'
174 1.4 rillig @echo 'LIST:[$${STAR}]="${LIST:[${STAR}]}"'
175 1.4 rillig @echo 'LIST:[$${AT}]="${LIST:[${AT}]}"'
176 1.5 rillig mod-squarebrackets-nested-error-1:
177 1.5 rillig # expect: make: in target "mod-squarebrackets-nested-error-1": while evaluating variable "LIST" with value "one two three four five six": Bad modifier ":[${EMPTY"
178 1.4 rillig @echo 'LIST:[$${EMPTY}]="${LIST:[${EMPTY}]}" is an error'
179 1.5 rillig mod-squarebrackets-nested-ok-2:
180 1.4 rillig @echo 'LIST:[$${LONGLIST:[21]:S/2//}]="${LIST:[${LONGLIST:[21]:S/2//}]}"'
181 1.4 rillig @echo 'LIST:[$${LIST:[#]}]="${LIST:[${LIST:[#]}]}"'
182 1.4 rillig @echo 'LIST:[$${LIST:[$${HASH}]}]="${LIST:[${LIST:[${HASH}]}]}"'
183 1.4 rillig
184 1.4 rillig mod-squarebrackets-space:
185 1.4 rillig # As of 2020-11-01, it is possible to have spaces before the numbers
186 1.4 rillig # but not after them. This is an unintended side-effect of using
187 1.4 rillig # strtol for parsing the numbers.
188 1.4 rillig @echo 'LIST:[ -1.. +3]="${LIST:[ -1.. +3]}"'
189 1.4 rillig
190 1.4 rillig mod-C-W:
191 1.4 rillig @echo 'LIST:C/ /,/="${LIST:C/ /,/}"'
192 1.4 rillig @echo 'LIST:C/ /,/W="${LIST:C/ /,/W}"'
193 1.4 rillig @echo 'LIST:C/ /,/gW="${LIST:C/ /,/gW}"'
194 1.4 rillig @echo 'EMPTY:C/^/,/="${EMPTY:C/^/,/}"'
195 1.4 rillig @echo 'EMPTY:C/^/,/W="${EMPTY:C/^/,/W}"'
196 1.4 rillig
197 1.4 rillig mod-S-W:
198 1.4 rillig @echo 'LIST:S/ /,/="${LIST:S/ /,/}"'
199 1.4 rillig @echo 'LIST:S/ /,/W="${LIST:S/ /,/W}"'
200 1.4 rillig @echo 'LIST:S/ /,/gW="${LIST:S/ /,/gW}"'
201 1.4 rillig @echo 'EMPTY:S/^/,/="${EMPTY:S/^/,/}"'
202 1.4 rillig @echo 'EMPTY:S/^/,/W="${EMPTY:S/^/,/W}"'
203 1.1 rillig
204 1.4 rillig mod-tW-tw:
205 1.4 rillig @echo 'LIST:tW="${LIST:tW}"'
206 1.4 rillig @echo 'LIST:tw="${LIST:tw}"'
207 1.4 rillig @echo 'LIST:tW:C/ /,/="${LIST:tW:C/ /,/}"'
208 1.4 rillig @echo 'LIST:tW:C/ /,/g="${LIST:tW:C/ /,/g}"'
209 1.4 rillig @echo 'LIST:tW:C/ /,/1g="${LIST:tW:C/ /,/1g}"'
210 1.4 rillig @echo 'LIST:tw:C/ /,/="${LIST:tw:C/ /,/}"'
211 1.4 rillig @echo 'LIST:tw:C/ /,/g="${LIST:tw:C/ /,/g}"'
212 1.4 rillig @echo 'LIST:tw:C/ /,/1g="${LIST:tw:C/ /,/1g}"'
213 1.4 rillig @echo 'LIST:tw:tW:C/ /,/="${LIST:tw:tW:C/ /,/}"'
214 1.4 rillig @echo 'LIST:tW:tw:C/ /,/="${LIST:tW:tw:C/ /,/}"'
215