1*6a7405f5SSimon J. Gerraty# $NetBSD: cond-op-and.mk,v 1.12 2025/01/11 21:21:33 rillig Exp $ 22c3632d1SSimon J. Gerraty# 32c3632d1SSimon J. Gerraty# Tests for the && operator in .if conditions. 42c3632d1SSimon J. Gerraty 52c3632d1SSimon J. Gerraty.if 0 && 0 62c3632d1SSimon J. Gerraty. error 72c3632d1SSimon J. Gerraty.endif 82c3632d1SSimon J. Gerraty 92c3632d1SSimon J. Gerraty.if 1 && 0 102c3632d1SSimon J. Gerraty. error 112c3632d1SSimon J. Gerraty.endif 122c3632d1SSimon J. Gerraty 132c3632d1SSimon J. Gerraty.if 0 && 1 142c3632d1SSimon J. Gerraty. error 152c3632d1SSimon J. Gerraty.endif 162c3632d1SSimon J. Gerraty 172c3632d1SSimon J. Gerraty.if !(1 && 1) 182c3632d1SSimon J. Gerraty. error 192c3632d1SSimon J. Gerraty.endif 202c3632d1SSimon J. Gerraty 2112904384SSimon J. Gerraty 222c3632d1SSimon J. Gerraty# The right-hand side is not evaluated since the left-hand side is already 232c3632d1SSimon J. Gerraty# false. 242c3632d1SSimon J. Gerraty.if 0 && ${UNDEF} 252c3632d1SSimon J. Gerraty.endif 262c3632d1SSimon J. Gerraty 2712904384SSimon J. Gerraty# When an outer condition makes the inner '&&' condition irrelevant, neither 2822619282SSimon J. Gerraty# of its operands is evaluated. 2912904384SSimon J. Gerraty.if 1 || (${UNDEF} && ${UNDEF}) 3012904384SSimon J. Gerraty.endif 3112904384SSimon J. Gerraty 3212904384SSimon J. Gerraty# Test combinations of outer '||' with inner '&&', to ensure that the operands 3312904384SSimon J. Gerraty# of the inner '&&' are only evaluated if necessary. 3412904384SSimon J. GerratyDEF= defined 35*6a7405f5SSimon J. Gerraty# expect+1: Variable "UNDEF" is undefined 3612904384SSimon J. Gerraty.if 0 || (${DEF} && ${UNDEF}) 3712904384SSimon J. Gerraty.endif 3812904384SSimon J. Gerraty.if 0 || (!${DEF} && ${UNDEF}) 3912904384SSimon J. Gerraty.endif 40*6a7405f5SSimon J. Gerraty# expect+1: Variable "UNDEF" is undefined 4112904384SSimon J. Gerraty.if 0 || (${UNDEF} && ${UNDEF}) 4212904384SSimon J. Gerraty.endif 43*6a7405f5SSimon J. Gerraty# expect+1: Variable "UNDEF" is undefined 4412904384SSimon J. Gerraty.if 0 || (!${UNDEF} && ${UNDEF}) 4512904384SSimon J. Gerraty.endif 4612904384SSimon J. Gerraty.if 1 || (${DEF} && ${UNDEF}) 4712904384SSimon J. Gerraty.endif 4812904384SSimon J. Gerraty.if 1 || (!${DEF} && ${UNDEF}) 4912904384SSimon J. Gerraty.endif 5012904384SSimon J. Gerraty.if 1 || (${UNDEF} && ${UNDEF}) 5112904384SSimon J. Gerraty.endif 5212904384SSimon J. Gerraty.if 1 || (!${UNDEF} && ${UNDEF}) 5312904384SSimon J. Gerraty.endif 5412904384SSimon J. Gerraty 5512904384SSimon J. Gerraty 56956e45f6SSimon J. Gerraty# The && operator may be abbreviated as &. This is not widely known though 57956e45f6SSimon J. Gerraty# and is also not documented in the manual page. 58956e45f6SSimon J. Gerraty 5922619282SSimon J. Gerraty# expect+1: Unknown operator '&' 60956e45f6SSimon J. Gerraty.if 0 & 0 61956e45f6SSimon J. Gerraty. error 6222619282SSimon J. Gerraty.else 6322619282SSimon J. Gerraty. error 64956e45f6SSimon J. Gerraty.endif 6522619282SSimon J. Gerraty# expect+1: Unknown operator '&' 66956e45f6SSimon J. Gerraty.if 1 & 0 67956e45f6SSimon J. Gerraty. error 6822619282SSimon J. Gerraty.else 69956e45f6SSimon J. Gerraty. error 70956e45f6SSimon J. Gerraty.endif 7122619282SSimon J. Gerraty# expect+1: Unknown operator '&' 7222619282SSimon J. Gerraty.if 0 & 1 7322619282SSimon J. Gerraty. error 7422619282SSimon J. Gerraty.else 7522619282SSimon J. Gerraty. error 7622619282SSimon J. Gerraty.endif 7722619282SSimon J. Gerraty# expect+1: Unknown operator '&' 78956e45f6SSimon J. Gerraty.if !(1 & 1) 79956e45f6SSimon J. Gerraty. error 8022619282SSimon J. Gerraty.else 8122619282SSimon J. Gerraty. error 82956e45f6SSimon J. Gerraty.endif 83956e45f6SSimon J. Gerraty 8422619282SSimon J. Gerraty# There is no operator '&&&'. The first two '&&' form an operator, the third 8522619282SSimon J. Gerraty# '&' forms the next (incomplete) token. 8622619282SSimon J. Gerraty# expect+1: Unknown operator '&' 87956e45f6SSimon J. Gerraty.if 0 &&& 0 88956e45f6SSimon J. Gerraty. error 8922619282SSimon J. Gerraty.else 9022619282SSimon J. Gerraty. error 91956e45f6SSimon J. Gerraty.endif 92956e45f6SSimon J. Gerraty 9398875883SSimon J. Gerraty# The '&&' operator must be preceded by whitespace, otherwise it becomes part 9422619282SSimon J. Gerraty# of the preceding bare word. The condition starts with a digit and is thus 9522619282SSimon J. Gerraty# parsed as '"1&&" != "" && 1'. 9698875883SSimon J. Gerraty.if 1&& && 1 9798875883SSimon J. Gerraty.else 9898875883SSimon J. Gerraty. error 9998875883SSimon J. Gerraty.endif 100