cond-token-var.mk (bmake-20201101) | : | cond-token-var.mk (bmake-20201117) | ||
---|---|---|---|---|
# $NetBSD: cond-token-var.mk,v 1.4 2020/10/24 08:46:08 rillig Exp $ | # $NetBSD: cond-token-var.mk,v 1.5 2020/11/15 14:58:14 rillig Exp $ | |||
# | # | |||
# Tests for variables in .if conditions. | # Tests for variable expressions in .if conditions. | |||
# | ||||
# Note the fine distinction between a variable and a variable expression. | ||||
# A variable has a name and a value. To access the value, one writes a | ||||
# variable expression of the form ${VAR}. This is a simple variable | ||||
# expression. Variable expressions can get more complicated by adding | ||||
# variable modifiers such as in ${VAR:Mpattern}. | ||||
# | ||||
# XXX: Strictly speaking, variable modifiers should be called expression | ||||
# modifiers instead since they only modify the expression, not the variable. | ||||
# Well, except for the assignment modifiers, these do indeed change the value | ||||
# of the variable. | ||||
DEF= defined | DEF= defined | |||
# A defined variable may appear on either side of the comparison. | # A defined variable may appear on either side of the comparison. | |||
.if ${DEF} == ${DEF} | .if ${DEF} == ${DEF} | |||
. info ok | . info ok | |||
.else | .else | |||
. error | . error | |||
.endif | .endif | |||
# A variable that appears on the left-hand side must be defined. | # A variable that appears on the left-hand side must be defined. | |||
# The following line thus generates a parse error. | ||||
.if ${UNDEF} == ${DEF} | .if ${UNDEF} == ${DEF} | |||
. error | . error | |||
.endif | .endif | |||
# A variable that appears on the right-hand side must be defined. | # A variable that appears on the right-hand side must be defined. | |||
# The following line thus generates a parse error. | ||||
.if ${DEF} == ${UNDEF} | .if ${DEF} == ${UNDEF} | |||
. error | . error | |||
.endif | .endif | |||
# A defined variable may appear as an expression of its own. | # A defined variable may appear as an expression of its own. | |||
.if ${DEF} | .if ${DEF} | |||
.endif | .endif | |||
# An undefined variable generates a warning. | # An undefined variable on its own generates a parse error. | |||
.if ${UNDEF} | .if ${UNDEF} | |||
.endif | .endif | |||
# The :U modifier turns an undefined variable into an ordinary expression. | # The :U modifier turns an undefined expression into a defined expression. | |||
# Since the expression is defined now, it doesn't generate any parse error. | ||||
.if ${UNDEF:U} | .if ${UNDEF:U} | |||
.endif | .endif | |||
End of changes. 6 change blocks. | ||||
4 lines changed or deleted | 18 lines changed or added |