1 1.8 rillig # $NetBSD: directive-ifndef.mk,v 1.8 2023/06/19 20:44:06 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.1 rillig all: 54