1# $NetBSD: cmd-errors-jobs.mk,v 1.15 2025/03/29 19:08:52 rillig Exp $ 2# 3# Demonstrate how errors in expressions affect whether the commands 4# are actually executed in jobs mode. 5 6RUN= @ run() { \ 7 echo "begin $$*" \ 8 && ${MAKE} -f ${MAKEFILE} -j1 "$$*" \ 9 && echo "end $$* with status $$?" \ 10 || echo "end $$* with status $$?" \ 11 && echo; \ 12 } && run 13 14all: 15 ${RUN} undefined-direct 16 ${RUN} undefined-indirect 17 ${RUN} parse-error-direct 18 ${RUN} parse-error-indirect 19 ${RUN} begin-direct 20 ${RUN} begin-indirect 21 ${RUN} end-direct 22 ${RUN} end-indirect 23 24 25# Undefined variables in expressions are not an error. They expand to empty 26# strings. 27# expect: : undefined-direct--eol 28# expect: end undefined-direct with status 0 29# expect: : undefined-direct--eol 30# expect: end undefined-indirect with status 0 31undefined-indirect: undefined-direct 32undefined-direct: 33 : $@-${UNDEFINED}-eol 34 35 36parse-error-indirect: parse-error-direct 37parse-error-direct: parse-error-unclosed-expression 38parse-error-direct: parse-error-unclosed-modifier 39parse-error-direct: parse-error-unknown-modifier 40 41parse-error-unclosed-expression: 42 : unexpected $@-${UNCLOSED 43 44parse-error-unclosed-modifier: 45 : unexpected $@-${UNCLOSED: 46 47parse-error-unknown-modifier: 48 : unexpected $@-${UNKNOWN:Z}-eol 49 50# expect-not-matches: ^: unexpected 51# expect: make: Unclosed variable "UNCLOSED" 52# expect: in command ": unexpected $@-${UNCLOSED" 53# expect: make: Unclosed expression, expecting '}' 54# expect: make: Unknown modifier ":Z" 55# expect: end parse-error-direct with status 2 56# expect: make: Unclosed variable "UNCLOSED" 57# expect: make: Unclosed expression, expecting '}' 58# expect: make: Unknown modifier ":Z" 59# expect: end parse-error-indirect with status 2 60 61 62.if make(begin-direct) 63begin-direct: 64.BEGIN: 65 (exit 13) # $@ 66.endif 67# expect: begin begin-direct 68# expect: make: stopped making "begin-direct" in unit-tests 69# expect: end begin-direct with status 1 70 71 72.if make(begin-indirect) 73begin-indirect: 74.BEGIN: before-begin 75 : Making $@ 76before-begin: 77 (exit 13) # $@ 78.endif 79# expect: begin begin-indirect 80# expect: *** Error code 13 (continuing) 81# expect: make: stopped making "begin-indirect" in unit-tests 82# expect: end begin-indirect with status 1 83 84 85.if make(end-direct) 86end-direct: 87.END: 88 (exit 13) # $@ 89.endif 90# expect: begin end-direct 91# expect: *** Error code 13 (continuing) 92# expect: Stop. 93# expect: make: stopped making "end-direct" in unit-tests 94# expect: end end-direct with status 1 95 96.if make(end-indirect) 97end-indirect: 98.END: before-end 99 : Making $@ 100before-end: 101 (exit 13) # $@ 102.endif 103# expect: begin end-indirect 104# expect: *** Error code 13 (continuing) 105# expect: make: stopped making "end-indirect" in unit-tests 106# expect: end end-indirect with status 1 107