]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/bmake/unit-tests/deptgt-end-fail.mk
bc: upgrade to version 3.3.4
[FreeBSD/FreeBSD.git] / contrib / bmake / unit-tests / deptgt-end-fail.mk
1 # $NetBSD: deptgt-end-fail.mk,v 1.6 2020/12/07 01:04:07 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_Run, in the code handling the .END node.
9
10 test: .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}
21 test: ${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
39 all all-dep end-dep: .PHONY
40
41 CMD.ok=         true
42 CMD.ERR=        false
43
44 all: all-dep
45         : Making ${.TARGET} from ${.ALLSRC}.
46         @${CMD.${all}}
47
48 all-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
56 end-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.