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