1 # $NetBSD: cmd-errors-jobs.mk,v 1.16 2025/06/28 22:39:28 rillig Exp $ 2 # 3 # Demonstrate how errors in expressions affect whether the commands 4 # are actually executed in jobs mode. 5 6 RUN= @ run() { \ 7 echo "begin $$*" \ 8 && ${MAKE} -f ${MAKEFILE} -j1 "$$*" \ 9 && echo "end $$* with status $$?" \ 10 || echo "end $$* with status $$?" \ 11 && echo; \ 12 } && run 13 14 all: 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 31 undefined-indirect: undefined-direct 32 undefined-direct: 33 : $@-${UNDEFINED}-eol 34 35 36 parse-error-indirect: parse-error-direct 37 parse-error-direct: parse-error-unclosed-expression 38 parse-error-direct: parse-error-unclosed-modifier 39 parse-error-direct: parse-error-unknown-modifier 40 41 parse-error-unclosed-expression: 42 : unexpected $@-${UNCLOSED 43 44 parse-error-unclosed-modifier: 45 : unexpected $@-${UNCLOSED: 46 47 parse-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) 63 begin-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) 73 begin-indirect: 74 .BEGIN: before-begin 75 : Making $@ 76 before-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) 86 end-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) 97 end-indirect: 98 .END: before-end 99 : Making $@ 100 before-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