1# $NetBSD: deptgt-end-fail.mk,v 1.7 2022/05/07 08:01:20 rillig Exp $ 2# 3# Tests for an errors in the main target, its dependencies, 4# the .END node and its dependencies. 5# 6# Before 2020-11-25, an error in the .END target did not print the "Stop.", 7# even though this was intended. The cause for this was a missing condition 8# in Compat_MakeAll, in the code handling the .END node. 9 10test: .PHONY 11 12# The default stop-on-error mode is not as interesting to test since it 13# stops right after the first error. 14.MAKEFLAGS: -k 15 16.for all in ok ERR 17. for all-dep in ok ERR 18. for end in ok ERR 19. for end-dep in ok ERR 20. for target in ${all}-${all-dep}-${end}-${end-dep} 21test: ${target} 22${target}: .PHONY .SILENT 23 echo Test case all=${all} all-dep=${all-dep} end=${end} end-dep=${end-dep}. 24 ${MAKE} -r -f ${MAKEFILE} \ 25 all=${all} all-dep=${all-dep} \ 26 end=${end} end-dep=${end-dep} \ 27 all; \ 28 echo "exit status $$?" 29 echo 30 echo 31. endfor 32. endfor 33. endfor 34. endfor 35.endfor 36 37.if make(all) 38 39all all-dep end-dep: .PHONY 40 41CMD.ok= true 42CMD.ERR= false 43 44all: all-dep 45 : Making ${.TARGET} from ${.ALLSRC}. 46 @${CMD.${all}} 47 48all-dep: 49 : Making ${.TARGET} out of nothing. 50 @${CMD.${all-dep}} 51 52.END: end-dep 53 : Making ${.TARGET} from ${.ALLSRC}. 54 @${CMD.${end}} 55 56end-dep: 57 : Making ${.TARGET} out of nothing. 58 @${CMD.${end-dep}} 59 60.endif 61 62# Until 2020-12-07, several of the test cases printed "`all' not remade 63# because of errors.", followed by "exit status 0", which contradicted 64# each other. 65 66# Until 2020-12-07, '.END' was even made if 'all' failed, but if a dependency 67# of 'all' failed, it was skipped. This inconsistency was not needed for 68# anything and thus has been dropped. To run some commands on error, use the 69# .ERROR target instead, see deptgt-error.mk. 70