Home | History | Annotate | Line # | Download | only in unit-tests
cond-token-var.mk revision 1.11
      1 # $NetBSD: cond-token-var.mk,v 1.11 2025/01/11 21:21:33 rillig Exp $
      2 #
      3 # Tests for expressions in .if conditions.
      4 #
      5 # Note the fine distinction between a variable and an expression.
      6 # A variable has a name and a value.  To access the value, one writes an
      7 # expression of the form ${VAR}.  This is a simple
      8 # expression.  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 D=	defined
     17 DEF=	defined
     18 
     19 
     20 # A defined variable may appear on either side of the comparison.
     21 .if ${DEF} == ${DEF}
     22 # expect+1: ok
     23 .  info ok
     24 .else
     25 .  error
     26 .endif
     27 
     28 # A variable that appears on the left-hand side must be defined.
     29 # expect+1: Variable "UNDEF" is undefined
     30 .if ${UNDEF} == ${DEF}
     31 .  error
     32 .endif
     33 
     34 # A variable that appears on the right-hand side must be defined.
     35 # expect+1: Variable "UNDEF" is undefined
     36 .if ${DEF} == ${UNDEF}
     37 .  error
     38 .endif
     39 
     40 # A defined variable may appear as an expression of its own.
     41 .if ${DEF}
     42 .endif
     43 
     44 # An undefined variable on its own generates a parse error.
     45 # expect+1: Variable "UNDEF" is undefined
     46 .if ${UNDEF}
     47 .endif
     48 
     49 # The :U modifier turns an undefined expression into a defined expression.
     50 # Since the expression is defined now, it doesn't generate any parse error.
     51 .if ${UNDEF:U}
     52 .endif
     53 
     54 
     55 # The same as above, for single-letter variables without braces or
     56 # parentheses.
     57 
     58 # A defined variable may appear on either side of the comparison.
     59 .if $D == $D
     60 .endif
     61 
     62 # A variable on the left-hand side must be defined.
     63 # expect+1: Variable "U" is undefined
     64 .if $U == $D
     65 .endif
     66 
     67 # A variable on the right-hand side must be defined.
     68 # expect+1: Variable "U" is undefined
     69 .if $D == $U
     70 .endif
     71 
     72 # A defined variable may appear as an expression of its own.
     73 .if $D
     74 .endif
     75 
     76 # An undefined variable without a comparison operator generates a parse error.
     77 # expect+1: Variable "U" is undefined
     78 .if $U
     79 .endif
     80 
     81 
     82 # If the value of the expression is a number, it is compared against
     83 # zero.
     84 .if ${:U0}
     85 .  error
     86 .endif
     87 .if !${:U1}
     88 .  error
     89 .endif
     90 
     91 # If the value of the expression is not a number, any non-empty
     92 # value evaluates to true, even if there is only whitespace.
     93 .if ${:U}
     94 .  error
     95 .endif
     96 .if !${:U }
     97 .  error
     98 .endif
     99 .if !${:Uanything}
    100 .  error
    101 .endif
    102 
    103 .MAKEFLAGS: -dv
    104 # The left-hand side of a comparison must not be an unquoted word.
    105 # expect+1: Malformed conditional 'x${UNDEF1}y == "${UNDEF2}" || 0x${UNDEF3}'
    106 .if x${UNDEF1}y == "${UNDEF2}" || 0x${UNDEF3}
    107 .endif
    108 
    109 # The left-hand side of a comparison must not be an unquoted word.
    110 # expect+1: Malformed conditional 'x${DEF}y == "${UNDEF2}" || 0x${UNDEF3}'
    111 .if x${DEF}y == "${UNDEF2}" || 0x${UNDEF3}
    112 .endif
    113 
    114 # The left-hand side of a comparison must not be an unquoted word.
    115 # expect+1: Malformed conditional 'x${DEF}y == "${DEF}" || 0x${UNDEF3}'
    116 .if x${DEF}y == "${DEF}" || 0x${UNDEF3}
    117 .endif
    118 
    119 # An expression in a condition must not be based on an undefined variable,
    120 # but undefined variables may occur in the variable name or in modifiers.
    121 #
    122 # expect: Var_Parse: ${VAR.param$U} (eval-defined-loud)
    123 # expect: Var_Parse: $U} (eval)
    124 VAR.param=	value of VAR.param
    125 .if ${VAR.param$U}
    126 .endif
    127 
    128 .MAKEFLAGS: -d0
    129