1 1.7 rillig # $NetBSD: varmod-select-words.mk,v 1.7 2025/03/30 01:27:13 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Extra text after "[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.7 rillig # expect: make: Invalid modifier ":[-]" 111 1.4 rillig @echo 'LIST:[-]="${LIST:[-]}" is an error' 112 1.5 rillig mod-squarebrackets-n-error-4: 113 1.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid 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.7 rillig # expect: make: Invalid modifier ":[]" 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