Home | History | Annotate | Line # | Download | only in unit-tests
      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