Home | History | Annotate | Line # | Download | only in unit-tests
cond-token-var.mk revision 1.10
      1  1.10  rillig # $NetBSD: cond-token-var.mk,v 1.10 2025/01/10 23:00:38 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.10  rillig D=	defined
     17   1.3  rillig DEF=	defined
     18   1.1  rillig 
     19  1.10  rillig 
     20   1.3  rillig # A defined variable may appear on either side of the comparison.
     21   1.3  rillig .if ${DEF} == ${DEF}
     22   1.7  rillig # expect+1: ok
     23   1.4  rillig .  info ok
     24   1.3  rillig .else
     25   1.4  rillig .  error
     26   1.3  rillig .endif
     27   1.3  rillig 
     28   1.3  rillig # A variable that appears on the left-hand side must be defined.
     29   1.9  rillig # expect+1: Malformed conditional '${UNDEF} == ${DEF}'
     30   1.3  rillig .if ${UNDEF} == ${DEF}
     31   1.4  rillig .  error
     32   1.3  rillig .endif
     33   1.3  rillig 
     34   1.3  rillig # A variable that appears on the right-hand side must be defined.
     35   1.9  rillig # expect+1: Malformed conditional '${DEF} == ${UNDEF}'
     36   1.3  rillig .if ${DEF} == ${UNDEF}
     37   1.4  rillig .  error
     38   1.3  rillig .endif
     39   1.3  rillig 
     40   1.3  rillig # A defined variable may appear as an expression of its own.
     41   1.3  rillig .if ${DEF}
     42   1.3  rillig .endif
     43   1.3  rillig 
     44   1.5  rillig # An undefined variable on its own generates a parse error.
     45   1.9  rillig # expect+1: Malformed conditional '${UNDEF}'
     46   1.3  rillig .if ${UNDEF}
     47   1.3  rillig .endif
     48   1.3  rillig 
     49   1.5  rillig # The :U modifier turns an undefined expression into a defined expression.
     50   1.5  rillig # Since the expression is defined now, it doesn't generate any parse error.
     51   1.3  rillig .if ${UNDEF:U}
     52   1.3  rillig .endif
     53   1.6  rillig 
     54  1.10  rillig 
     55  1.10  rillig # The same as above, for single-letter variables without braces or
     56  1.10  rillig # parentheses.
     57  1.10  rillig 
     58  1.10  rillig # A defined variable may appear on either side of the comparison.
     59  1.10  rillig .if $D == $D
     60  1.10  rillig .endif
     61  1.10  rillig 
     62  1.10  rillig # A variable on the left-hand side must be defined.
     63  1.10  rillig # FIXME: Replace "Malformed" with "Undefined variable".
     64  1.10  rillig # expect+1: Malformed conditional '$U == $D'
     65  1.10  rillig .if $U == $D
     66  1.10  rillig .endif
     67  1.10  rillig 
     68  1.10  rillig # A variable on the right-hand side must be defined.
     69  1.10  rillig # FIXME: Replace "Malformed" with "Undefined variable".
     70  1.10  rillig # expect+1: Malformed conditional '$D == $U'
     71  1.10  rillig .if $D == $U
     72  1.10  rillig .endif
     73  1.10  rillig 
     74  1.10  rillig # A defined variable may appear as an expression of its own.
     75  1.10  rillig .if $D
     76  1.10  rillig .endif
     77  1.10  rillig 
     78  1.10  rillig # An undefined variable without a comparison operator generates a parse error.
     79  1.10  rillig # FIXME: Replace "Malformed" with "Undefined variable".
     80  1.10  rillig # expect+1: Malformed conditional '$U'
     81  1.10  rillig .if $U
     82  1.10  rillig .endif
     83  1.10  rillig 
     84  1.10  rillig 
     85   1.8  rillig # If the value of the expression is a number, it is compared against
     86   1.6  rillig # zero.
     87   1.6  rillig .if ${:U0}
     88   1.6  rillig .  error
     89   1.6  rillig .endif
     90   1.6  rillig .if !${:U1}
     91   1.6  rillig .  error
     92   1.6  rillig .endif
     93   1.6  rillig 
     94   1.8  rillig # If the value of the expression is not a number, any non-empty
     95   1.6  rillig # value evaluates to true, even if there is only whitespace.
     96   1.6  rillig .if ${:U}
     97   1.6  rillig .  error
     98   1.6  rillig .endif
     99   1.6  rillig .if !${:U }
    100   1.6  rillig .  error
    101   1.6  rillig .endif
    102   1.6  rillig .if !${:Uanything}
    103   1.6  rillig .  error
    104   1.6  rillig .endif
    105  1.10  rillig 
    106  1.10  rillig .MAKEFLAGS: -dv
    107  1.10  rillig # FIXME: Replace "Malformed" with "Undefined variable".
    108  1.10  rillig # expect+1: Malformed conditional 'x${UNDEF1}y == "${UNDEF2}" || 0x${UNDEF3}'
    109  1.10  rillig .if x${UNDEF1}y == "${UNDEF2}" || 0x${UNDEF3}
    110  1.10  rillig .endif
    111  1.10  rillig 
    112  1.10  rillig # FIXME: Replace "Malformed" with "Undefined variable".
    113  1.10  rillig # expect+1: Malformed conditional 'x${DEF}y == "${UNDEF2}" || 0x${UNDEF3}'
    114  1.10  rillig .if x${DEF}y == "${UNDEF2}" || 0x${UNDEF3}
    115  1.10  rillig .endif
    116  1.10  rillig 
    117  1.10  rillig # FIXME: Replace "Malformed" with "Undefined variable".
    118  1.10  rillig # expect+1: Malformed conditional 'x${DEF}y == "${DEF}" || 0x${UNDEF3}'
    119  1.10  rillig .if x${DEF}y == "${DEF}" || 0x${UNDEF3}
    120  1.10  rillig .endif
    121  1.10  rillig .MAKEFLAGS: -d0
    122