Home | History | Annotate | Line # | Download | only in unit-tests
cond-token-var.mk revision 1.9
      1  1.9  rillig # $NetBSD: cond-token-var.mk,v 1.9 2024/08/06 18:00:17 rillig Exp $
      2  1.1  rillig #
      3  1.8  rillig # Tests for expressions in .if conditions.
      4  1.5  rillig #
      5  1.8  rillig # Note the fine distinction between a variable and an expression.
      6  1.8  rillig # A variable has a name and a value.  To access the value, one writes an
      7  1.8  rillig # expression of the form ${VAR}.  This is a simple
      8  1.8  rillig # expression.  Expressions can get more complicated by adding
      9  1.5  rillig # variable modifiers such as in ${VAR:Mpattern}.
     10  1.5  rillig #
     11  1.5  rillig # XXX: Strictly speaking, variable modifiers should be called expression
     12  1.5  rillig # modifiers instead since they only modify the expression, not the variable.
     13  1.5  rillig # Well, except for the assignment modifiers, these do indeed change the value
     14  1.5  rillig # of the variable.
     15  1.1  rillig 
     16  1.3  rillig DEF=	defined
     17  1.1  rillig 
     18  1.3  rillig # A defined variable may appear on either side of the comparison.
     19  1.3  rillig .if ${DEF} == ${DEF}
     20  1.7  rillig # expect+1: ok
     21  1.4  rillig .  info ok
     22  1.3  rillig .else
     23  1.4  rillig .  error
     24  1.3  rillig .endif
     25  1.3  rillig 
     26  1.3  rillig # A variable that appears on the left-hand side must be defined.
     27  1.9  rillig # expect+1: Malformed conditional '${UNDEF} == ${DEF}'
     28  1.3  rillig .if ${UNDEF} == ${DEF}
     29  1.4  rillig .  error
     30  1.3  rillig .endif
     31  1.3  rillig 
     32  1.3  rillig # A variable that appears on the right-hand side must be defined.
     33  1.9  rillig # expect+1: Malformed conditional '${DEF} == ${UNDEF}'
     34  1.3  rillig .if ${DEF} == ${UNDEF}
     35  1.4  rillig .  error
     36  1.3  rillig .endif
     37  1.3  rillig 
     38  1.3  rillig # A defined variable may appear as an expression of its own.
     39  1.3  rillig .if ${DEF}
     40  1.3  rillig .endif
     41  1.3  rillig 
     42  1.5  rillig # An undefined variable on its own generates a parse error.
     43  1.9  rillig # expect+1: Malformed conditional '${UNDEF}'
     44  1.3  rillig .if ${UNDEF}
     45  1.3  rillig .endif
     46  1.3  rillig 
     47  1.5  rillig # The :U modifier turns an undefined expression into a defined expression.
     48  1.5  rillig # Since the expression is defined now, it doesn't generate any parse error.
     49  1.3  rillig .if ${UNDEF:U}
     50  1.3  rillig .endif
     51  1.6  rillig 
     52  1.8  rillig # If the value of the expression is a number, it is compared against
     53  1.6  rillig # zero.
     54  1.6  rillig .if ${:U0}
     55  1.6  rillig .  error
     56  1.6  rillig .endif
     57  1.6  rillig .if !${:U1}
     58  1.6  rillig .  error
     59  1.6  rillig .endif
     60  1.6  rillig 
     61  1.8  rillig # If the value of the expression is not a number, any non-empty
     62  1.6  rillig # value evaluates to true, even if there is only whitespace.
     63  1.6  rillig .if ${:U}
     64  1.6  rillig .  error
     65  1.6  rillig .endif
     66  1.6  rillig .if !${:U }
     67  1.6  rillig .  error
     68  1.6  rillig .endif
     69  1.6  rillig .if !${:Uanything}
     70  1.6  rillig .  error
     71  1.6  rillig .endif
     72