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