cond-func.mk revision 1.1 1 # $NetBSD: cond-func.mk,v 1.1 2020/08/20 17:45:47 rillig Exp $
2 #
3 # Tests for those parts of the functions in .if conditions that are common
4 # among several functions.
5 #
6 # The below test uses the function defined(...) since it has no side-effects,
7 # the other functions (except empty(...)) would work equally well.
8
9 DEF= defined
10 ${:UA B}= variable name with spaces
11 ${:UVAR(value)}= variable name with parentheses
12 ${:UVAR{value}}= variable name with braces
13
14 .if !defined(DEF)
15 .error
16 .endif
17
18 # Horizontal whitespace after the opening parenthesis is ignored.
19 .if !defined( DEF)
20 .error
21 .endif
22
23 # Horizontal whitespace before the closing parenthesis is ignored.
24 .if !defined(DEF )
25 .error
26 .endif
27
28 # The argument of a function must not directly contain whitespace.
29 .if !defined(A B)
30 .error
31 .endif
32
33 # If necessary, the whitespace can be generated by a variable expression.
34 .if !defined(${:UA B})
35 .error
36 .endif
37
38 # Characters that could be mistaken for operators must not appear directly
39 # in a function argument. As with whitespace, these can be generated
40 # indirectly.
41 #
42 # It's not entirely clear why these characters are forbidden.
43 # The most plausible reason seems to be typo detection.
44 .if !defined(A&B)
45 .error
46 .endif
47 .if !defined(A|B)
48 .error
49 .endif
50
51 # Even parentheses may appear in variable names.
52 # They must be balanced though.
53 .if !defined(VAR(value))
54 .error
55 .endif
56
57 # Braces do not have any special meaning when parsing arguments.
58 .if !defined(VAR{value})
59 .error
60 .endif
61
62 all:
63 @:;
64