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