directive-ifndef.mk revision 1.9 1 1.9 rillig # $NetBSD: directive-ifndef.mk,v 1.9 2023/10/19 18:24:33 rillig Exp $
2 1.1 rillig #
3 1.5 rillig # Tests for the .ifndef directive, which can be used for multiple-inclusion
4 1.5 rillig # guards. In contrast to C, where #ifndef and #define nicely line up the
5 1.5 rillig # macro name, there is no such syntax in make. Therefore, it is more
6 1.5 rillig # common to use .if !defined(GUARD) instead.
7 1.8 rillig #
8 1.8 rillig # See also:
9 1.8 rillig # directive-include-guard.mk
10 1.1 rillig
11 1.5 rillig .ifndef GUARD
12 1.5 rillig GUARD= # defined
13 1.7 rillig # expect+1: guarded section
14 1.6 rillig . info guarded section
15 1.5 rillig .endif
16 1.5 rillig
17 1.5 rillig .ifndef GUARD
18 1.5 rillig GUARD= # defined
19 1.6 rillig . info guarded section
20 1.5 rillig .endif
21 1.5 rillig
22 1.5 rillig .if !defined(GUARD)
23 1.5 rillig GUARD= # defined
24 1.6 rillig . info guarded section
25 1.5 rillig .endif
26 1.1 rillig
27 1.8 rillig
28 1.8 rillig # The '.ifndef' directive can be used with multiple arguments, even negating
29 1.8 rillig # them. Since these conditions are confusing for humans, they should be
30 1.8 rillig # replaced with easier-to-understand plain '.if' directives.
31 1.8 rillig DEFINED=
32 1.8 rillig .ifndef UNDEFINED && UNDEFINED
33 1.8 rillig .else
34 1.8 rillig . error
35 1.8 rillig .endif
36 1.8 rillig .ifndef UNDEFINED && DEFINED
37 1.8 rillig . error
38 1.8 rillig .endif
39 1.8 rillig .ifndef DEFINED && DEFINED
40 1.8 rillig . error
41 1.8 rillig .endif
42 1.8 rillig .ifndef !UNDEFINED && !UNDEFINED
43 1.8 rillig . error
44 1.8 rillig .endif
45 1.8 rillig .ifndef !UNDEFINED && !DEFINED
46 1.8 rillig . error
47 1.8 rillig .endif
48 1.8 rillig .ifndef !DEFINED && !DEFINED
49 1.8 rillig .else
50 1.8 rillig . error
51 1.8 rillig .endif
52 1.8 rillig
53 1.9 rillig
54 1.9 rillig # The negation from the 'if-not-defined' directive only applies to bare words,
55 1.9 rillig # but not to numbers, quoted strings or expressions. Those are evaluated
56 1.9 rillig # without extra negation, just like in a plain '.if' directive.
57 1.9 rillig .ifndef 0
58 1.9 rillig . error
59 1.9 rillig .endif
60 1.9 rillig .ifndef 1
61 1.9 rillig .else
62 1.9 rillig . error
63 1.9 rillig .endif
64 1.9 rillig .ifndef ""
65 1.9 rillig . error
66 1.9 rillig .endif
67 1.9 rillig .ifndef "word"
68 1.9 rillig .else
69 1.9 rillig . error
70 1.9 rillig .endif
71 1.9 rillig .ifndef ${:UUNDEFINED}
72 1.9 rillig .else
73 1.9 rillig . error
74 1.9 rillig .endif
75 1.9 rillig .ifndef ${:UDEFINED}
76 1.9 rillig . error
77 1.9 rillig .endif
78 1.9 rillig .ifndef ${:U0}
79 1.9 rillig . error
80 1.9 rillig .endif
81 1.9 rillig .ifndef ${:U1}
82 1.9 rillig .else
83 1.9 rillig . error
84 1.9 rillig .endif
85 1.9 rillig
86 1.9 rillig
87 1.1 rillig all:
88