1 1.3 rillig # $NetBSD: cond-short.mk,v 1.3 2020/07/02 10:36:58 rillig Exp $ 2 1.1 rillig # 3 1.1 rillig # Demonstrates that in conditions, the right-hand side of an && or || 4 1.2 rillig # is only evaluated if it can actually influence the result. 5 1.1 rillig # 6 1.2 rillig # Between 2015-10-11 and 2020-06-28, the right-hand side of an && or || 7 1.2 rillig # operator was always evaluated, which was wrong. 8 1.1 rillig # 9 1.2 rillig 10 1.2 rillig # The && operator. 11 1.1 rillig 12 1.1 rillig .if 0 && ${echo "unexpected and" 1>&2 :L:sh} 13 1.1 rillig .endif 14 1.1 rillig 15 1.1 rillig .if 1 && ${echo "expected and" 1>&2 :L:sh} 16 1.1 rillig .endif 17 1.1 rillig 18 1.2 rillig .if 0 && exists(nonexistent${echo "unexpected and exists" 1>&2 :L:sh}) 19 1.2 rillig .endif 20 1.2 rillig 21 1.2 rillig .if 1 && exists(nonexistent${echo "expected and exists" 1>&2 :L:sh}) 22 1.2 rillig .endif 23 1.2 rillig 24 1.2 rillig .if 0 && empty(${echo "unexpected and empty" 1>&2 :L:sh}) 25 1.2 rillig .endif 26 1.2 rillig 27 1.2 rillig .if 1 && empty(${echo "expected and empty" 1>&2 :L:sh}) 28 1.2 rillig .endif 29 1.2 rillig 30 1.3 rillig # FIXME: "VAR U11" must not be evaluated. 31 1.3 rillig # The whole !empty condition must only be parsed and then discarded. 32 1.3 rillig VAR= ${VAR${:U11${echo "unexpected VAR U11" 1>&2 :L:sh}}} 33 1.3 rillig VAR13= ${VAR${:U12${echo "unexpected VAR13" 1>&2 :L:sh}}} 34 1.3 rillig .if 0 && !empty(VAR${:U13${echo "unexpected U13 condition" 1>&2 :L:sh}}) 35 1.3 rillig .endif 36 1.3 rillig 37 1.3 rillig VAR= ${VAR${:U21${echo "unexpected VAR U21" 1>&2 :L:sh}}} 38 1.3 rillig VAR23= ${VAR${:U22${echo "expected VAR23" 1>&2 :L:sh}}} 39 1.3 rillig .if 1 && !empty(VAR${:U23${echo "expected U23 condition" 1>&2 :L:sh}}) 40 1.3 rillig .endif 41 1.3 rillig 42 1.2 rillig # The || operator. 43 1.2 rillig 44 1.1 rillig .if 1 || ${echo "unexpected or" 1>&2 :L:sh} 45 1.1 rillig .endif 46 1.1 rillig 47 1.1 rillig .if 0 || ${echo "expected or" 1>&2 :L:sh} 48 1.1 rillig .endif 49 1.1 rillig 50 1.2 rillig .if 1 || exists(nonexistent${echo "unexpected or exists" 1>&2 :L:sh}) 51 1.2 rillig .endif 52 1.2 rillig 53 1.2 rillig .if 0 || exists(nonexistent${echo "expected or exists" 1>&2 :L:sh}) 54 1.2 rillig .endif 55 1.2 rillig 56 1.2 rillig .if 1 || empty(${echo "unexpected or empty" 1>&2 :L:sh}) 57 1.2 rillig .endif 58 1.2 rillig 59 1.2 rillig .if 0 || empty(${echo "expected or empty" 1>&2 :L:sh}) 60 1.2 rillig .endif 61 1.2 rillig 62 1.2 rillig # Unreachable nested conditions are skipped completely as well. 63 1.1 rillig 64 1.1 rillig .if 0 65 1.1 rillig . if ${echo "unexpected nested and" 1>&2 :L:sh} 66 1.1 rillig . endif 67 1.1 rillig .endif 68 1.1 rillig 69 1.1 rillig .if 1 70 1.1 rillig .elif ${echo "unexpected nested or" 1>&2 :L:sh} 71 1.1 rillig .endif 72 1.1 rillig 73 1.1 rillig all: 74 1.1 rillig @:;: 75