aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/unit-tests/deptgt-end-fail.mk
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/bmake/unit-tests/deptgt-end-fail.mk')
-rw-r--r--contrib/bmake/unit-tests/deptgt-end-fail.mk69
1 files changed, 69 insertions, 0 deletions
diff --git a/contrib/bmake/unit-tests/deptgt-end-fail.mk b/contrib/bmake/unit-tests/deptgt-end-fail.mk
new file mode 100644
index 000000000000..57cdc7da8679
--- /dev/null
+++ b/contrib/bmake/unit-tests/deptgt-end-fail.mk
@@ -0,0 +1,69 @@
+# $NetBSD: deptgt-end-fail.mk,v 1.6 2020/12/07 01:04:07 rillig Exp $
+#
+# Tests for an errors in the main target, its dependencies,
+# the .END node and its dependencies.
+#
+# Before 2020-11-25, an error in the .END target did not print the "Stop.",
+# even though this was intended. The cause for this was a missing condition
+# in Compat_Run, in the code handling the .END node.
+
+test: .PHONY
+
+# The default stop-on-error mode is not as interesting to test since it
+# stops right after the first error.
+.MAKEFLAGS: -k
+
+.for all in ok ERR
+. for all-dep in ok ERR
+. for end in ok ERR
+. for end-dep in ok ERR
+. for target in ${all}-${all-dep}-${end}-${end-dep}
+test: ${target}
+${target}: .PHONY .SILENT
+ echo Test case all=${all} all-dep=${all-dep} end=${end} end-dep=${end-dep}.
+ ${MAKE} -r -f ${MAKEFILE} \
+ all=${all} all-dep=${all-dep} \
+ end=${end} end-dep=${end-dep} \
+ all; \
+ echo "exit status $$?"
+ echo
+ echo
+. endfor
+. endfor
+. endfor
+. endfor
+.endfor
+
+.if make(all)
+
+all all-dep end-dep: .PHONY
+
+CMD.ok= true
+CMD.ERR= false
+
+all: all-dep
+ : Making ${.TARGET} from ${.ALLSRC}.
+ @${CMD.${all}}
+
+all-dep:
+ : Making ${.TARGET} out of nothing.
+ @${CMD.${all-dep}}
+
+.END: end-dep
+ : Making ${.TARGET} from ${.ALLSRC}.
+ @${CMD.${end}}
+
+end-dep:
+ : Making ${.TARGET} out of nothing.
+ @${CMD.${end-dep}}
+
+.endif
+
+# Until 2020-12-07, several of the test cases printed "`all' not remade
+# because of errors.", followed by "exit status 0", which contradicted
+# each other.
+
+# Until 2020-12-07, '.END' was even made if 'all' failed, but if a dependency
+# of 'all' failed, it was skipped. This inconsistency was not needed for
+# anything and thus has been dropped. To run some commands on error, use the
+# .ERROR target instead, see deptgt-error.mk.