varmod-order.mk revision 1.13 1 1.13 rillig # $NetBSD: varmod-order.mk,v 1.13 2024/07/05 17:41:50 rillig Exp $
2 1.1 rillig #
3 1.6 rillig # Tests for the :O variable modifier and its variants, which either sort the
4 1.6 rillig # words of the value or shuffle them.
5 1.1 rillig
6 1.7 rillig WORDS= one two three four five six seven eight nine ten
7 1.7 rillig NUMBERS= 8 5 4 9 1 7 6 10 3 2 # in English alphabetical order
8 1.3 rillig
9 1.7 rillig .if ${WORDS:O} != "eight five four nine one seven six ten three two"
10 1.7 rillig . error ${WORDS:O}
11 1.3 rillig .endif
12 1.1 rillig
13 1.4 rillig # Unknown modifier "OX"
14 1.12 rillig # FIXME: The error message "Undefined variable" is wrong.
15 1.12 rillig # expect+2: Undefined variable "${WORDS:OX"
16 1.12 rillig # expect+1: while evaluating variable "WORDS" with value "one two three four five six seven eight nine ten": Bad modifier ":OX"
17 1.7 rillig _:= ${WORDS:OX}
18 1.4 rillig
19 1.4 rillig # Unknown modifier "OxXX"
20 1.12 rillig # FIXME: The error message "Undefined variable" is wrong.
21 1.12 rillig # expect+2: Undefined variable "${WORDS:Ox"
22 1.12 rillig # expect+1: while evaluating variable "WORDS" with value "one two three four five six seven eight nine ten": Bad modifier ":OxXX"
23 1.7 rillig _:= ${WORDS:OxXX}
24 1.4 rillig
25 1.6 rillig # Missing closing brace, to cover the error handling code.
26 1.13 rillig # expect: make: Unclosed expression, expecting '}' for modifier "O" of variable "WORDS" with value "eight five four nine one seven six ten three two"
27 1.7 rillig _:= ${WORDS:O
28 1.13 rillig # expect: make: Unclosed expression, expecting '}' for modifier "On" of variable "NUMBERS" with value "1 2 3 4 5 6 7 8 9 10"
29 1.6 rillig _:= ${NUMBERS:On
30 1.13 rillig # expect: make: Unclosed expression, expecting '}' for modifier "Onr" of variable "NUMBERS" with value "10 9 8 7 6 5 4 3 2 1"
31 1.6 rillig _:= ${NUMBERS:Onr
32 1.6 rillig
33 1.6 rillig # Shuffling numerically doesn't make sense, so don't allow 'x' and 'n' to be
34 1.6 rillig # combined.
35 1.6 rillig #
36 1.12 rillig # expect+2: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Oxn"
37 1.6 rillig # expect+1: Malformed conditional (${NUMBERS:Oxn})
38 1.6 rillig .if ${NUMBERS:Oxn}
39 1.6 rillig . error
40 1.6 rillig .else
41 1.6 rillig . error
42 1.6 rillig .endif
43 1.6 rillig
44 1.6 rillig # Extra characters after ':On' are detected and diagnosed.
45 1.6 rillig #
46 1.12 rillig # expect+2: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":On_typo"
47 1.11 rillig # expect+1: Malformed conditional (${NUMBERS:On_typo})
48 1.6 rillig .if ${NUMBERS:On_typo}
49 1.6 rillig . error
50 1.6 rillig .else
51 1.6 rillig . error
52 1.6 rillig .endif
53 1.6 rillig
54 1.6 rillig # Extra characters after ':Onr' are detected and diagnosed.
55 1.6 rillig #
56 1.12 rillig # expect+2: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onr_typo"
57 1.11 rillig # expect+1: Malformed conditional (${NUMBERS:Onr_typo})
58 1.6 rillig .if ${NUMBERS:Onr_typo}
59 1.6 rillig . error
60 1.6 rillig .else
61 1.6 rillig . error
62 1.6 rillig .endif
63 1.6 rillig
64 1.6 rillig # Extra characters after ':Orn' are detected and diagnosed.
65 1.6 rillig #
66 1.12 rillig # expect+2: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Orn_typo"
67 1.11 rillig # expect+1: Malformed conditional (${NUMBERS:Orn_typo})
68 1.6 rillig .if ${NUMBERS:Orn_typo}
69 1.6 rillig . error
70 1.6 rillig .else
71 1.6 rillig . error
72 1.6 rillig .endif
73 1.6 rillig
74 1.6 rillig # Repeating the 'n' is not supported. In the typical use cases, the sorting
75 1.6 rillig # criteria are fixed, not computed, therefore allowing this redundancy does
76 1.6 rillig # not make sense.
77 1.6 rillig #
78 1.12 rillig # expect+2: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onn"
79 1.11 rillig # expect+1: Malformed conditional (${NUMBERS:Onn})
80 1.6 rillig .if ${NUMBERS:Onn}
81 1.6 rillig . error
82 1.6 rillig .else
83 1.6 rillig . error
84 1.6 rillig .endif
85 1.6 rillig
86 1.6 rillig # Repeating the 'r' is not supported as well, for the same reasons as above.
87 1.6 rillig #
88 1.12 rillig # expect+2: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Onrr"
89 1.11 rillig # expect+1: Malformed conditional (${NUMBERS:Onrr})
90 1.6 rillig .if ${NUMBERS:Onrr}
91 1.6 rillig . error
92 1.6 rillig .else
93 1.6 rillig . error
94 1.6 rillig .endif
95 1.6 rillig
96 1.6 rillig # Repeating the 'r' is not supported as well, for the same reasons as above.
97 1.6 rillig #
98 1.12 rillig # expect+2: while evaluating variable "NUMBERS" with value "8 5 4 9 1 7 6 10 3 2": Bad modifier ":Orrn"
99 1.11 rillig # expect+1: Malformed conditional (${NUMBERS:Orrn})
100 1.6 rillig .if ${NUMBERS:Orrn}
101 1.6 rillig . error
102 1.6 rillig .else
103 1.6 rillig . error
104 1.6 rillig .endif
105 1.6 rillig
106 1.9 rillig
107 1.10 rillig # If a modifier that starts with ':O' is not one of the known sort or shuffle
108 1.10 rillig # forms, it is a parse error. Several other modifiers such as ':H' or ':u'
109 1.10 rillig # fall back to the SysV modifier, for example, ':H=new' is not the standard
110 1.10 rillig # ':H' modifier but instead replaces a trailing 'H' with 'new' in each word.
111 1.10 rillig # There is no such fallback for the ':O' modifiers.
112 1.10 rillig SWITCH= On
113 1.12 rillig # expect+2: while evaluating variable "SWITCH" with value "On": Bad modifier ":On=Off"
114 1.11 rillig # expect+1: Malformed conditional (${SWITCH:On=Off} != "Off")
115 1.10 rillig .if ${SWITCH:On=Off} != "Off"
116 1.9 rillig . error
117 1.9 rillig .else
118 1.9 rillig . error
119 1.9 rillig .endif
120 1.9 rillig
121 1.1 rillig all:
122