1 1.9 sjg # $Id: varmisc.mk,v 1.9 2020/07/01 18:02:26 sjg Exp $ 2 1.1 apb # 3 1.1 apb # Miscellaneous variable tests. 4 1.1 apb 5 1.6 sjg all: unmatched_var_paren D_true U_true D_false U_false Q_lhs Q_rhs NQ_none \ 6 1.9 sjg strftime cmpv manok 7 1.1 apb 8 1.1 apb unmatched_var_paren: 9 1.2 sjg @echo ${foo::=foo-text} 10 1.3 sjg 11 1.4 sjg True = ${echo true >&2:L:sh}TRUE 12 1.4 sjg False= ${echo false >&2:L:sh}FALSE 13 1.3 sjg 14 1.3 sjg VSET= is set 15 1.3 sjg .undef UNDEF 16 1.3 sjg 17 1.3 sjg U_false: 18 1.3 sjg @echo :U skipped when var set 19 1.3 sjg @echo ${VSET:U${False}} 20 1.3 sjg 21 1.3 sjg D_false: 22 1.3 sjg @echo :D skipped if var undef 23 1.3 sjg @echo ${UNDEF:D${False}} 24 1.3 sjg 25 1.3 sjg U_true: 26 1.3 sjg @echo :U expanded when var undef 27 1.3 sjg @echo ${UNDEF:U${True}} 28 1.3 sjg 29 1.3 sjg D_true: 30 1.3 sjg @echo :D expanded when var set 31 1.3 sjg @echo ${VSET:D${True}} 32 1.3 sjg 33 1.3 sjg Q_lhs: 34 1.3 sjg @echo :? only lhs when value true 35 1.3 sjg @echo ${1:L:?${True}:${False}} 36 1.3 sjg 37 1.3 sjg Q_rhs: 38 1.3 sjg @echo :? only rhs when value false 39 1.3 sjg @echo ${0:L:?${True}:${False}} 40 1.5 sjg 41 1.5 sjg NQ_none: 42 1.5 sjg @echo do not evaluate or expand :? if discarding 43 1.5 sjg @echo ${VSET:U${1:L:?${True}:${False}}} 44 1.6 sjg 45 1.6 sjg April1= 1459494000 46 1.6 sjg 47 1.6 sjg # slightly contorted syntax to use utc via variable 48 1.6 sjg strftime: 49 1.6 sjg @echo ${year=%Y month=%m day=%d:L:gmtime=1459494000} 50 1.6 sjg @echo date=${%Y%m%d:L:${gmtime=${April1}:L}} 51 1.6 sjg 52 1.7 sjg # big jumps to handle 3 digits per step 53 1.8 sjg M_cmpv.units = 1 1000 1000000 54 1.7 sjg M_cmpv = S,., ,g:_:range:@i@+ $${_:[-$$i]} \* $${M_cmpv.units:[$$i]}@:S,^,expr 0 ,1:sh 55 1.7 sjg 56 1.8 sjg Version = 123.456.789 57 1.8 sjg cmpv.only = target specific vars 58 1.7 sjg 59 1.7 sjg cmpv: 60 1.7 sjg @echo Version=${Version} == ${Version:${M_cmpv}} 61 1.7 sjg @echo Literal=3.4.5 == ${3.4.5:L:${M_cmpv}} 62 1.8 sjg @echo We have ${${.TARGET:T}.only} 63 1.9 sjg 64 1.9 sjg # catch misshandling of nested vars in .for loop 65 1.9 sjg MAN= 66 1.9 sjg MAN1= make.1 67 1.9 sjg .for s in 1 2 68 1.9 sjg .if defined(MAN$s) && !empty(MAN$s) 69 1.9 sjg MAN+= ${MAN$s} 70 1.9 sjg .endif 71 1.9 sjg .endfor 72 1.9 sjg 73 1.9 sjg manok: 74 1.9 sjg @echo MAN=${MAN} 75