Home | History | Annotate | Line # | Download | only in unit-tests
opt-keep-going-indirect.mk revision 1.3
      1 # $NetBSD: opt-keep-going-indirect.mk,v 1.3 2024/04/02 15:05:15 rillig Exp $
      2 #
      3 # Tests for the -k command line option, which stops building a target as soon
      4 # as an error is detected, but continues building the other, independent
      5 # targets, as far as possible.
      6 #
      7 # History:
      8 #	In 1993, the exit status for the option '-k' was always 0, even if a
      9 #	direct or an indirect target failed.
     10 #
     11 #	Since 2000.12.30.02.05.21, the word '(continuing)' is missing in jobs
     12 #	mode, both for direct as well as indirect targets.
     13 #
     14 #	Since 2001.10.16.18.50.12, the exit status for a direct failure in
     15 #	compat mode is the correct 1, while jobs mode and indirect failures
     16 #	still return the wrong exit status 0.  The number of empty lines
     17 #	between the various error messages differs between the modes, for no
     18 #	reason.
     19 #
     20 #	At 2006.11.17.22.07.39, the exit status for direct failures in both
     21 #	modes and for indirect failures in jobs mode was fixed to the correct
     22 #	1.  The exit status for indirect failures in compat mode is still the
     23 #	wrong 0.  On the downside, a failed indirect target in jobs mode is no
     24 #	longer listed as "not remade because of errors".
     25 #
     26 #	At 2016.08.26.23.28.39, the additional empty line for a direct failure
     27 #	in compat mode was removed, making it consistent with a direct failure
     28 #	in jobs mode.  This left only one inconsistency, in that indirect
     29 #	failures in jobs mode (by far the most common when building large
     30 #	projects) did not produce any empty line.
     31 #
     32 #	Since 2020.12.07.00.53.30, the exit status is consistently 1 for
     33 #	failures in all 4 modes.
     34 #
     35 # Bugs:
     36 #	The output in case of a failure needlessly differs between compat and
     37 #	jobs mode.  As of 2022-02-12, compat mode outputs '(continuing)' while
     38 #	jobs mode doesn't.  In compat mode, the output does not mention which
     39 #	target failed.
     40 #
     41 # See also:
     42 #	https://gnats.netbsd.org/49720
     43 
     44 .PHONY: all direct indirect
     45 
     46 # The 'set +e' was necessary in 2003, when the shell was run with '-e' by
     47 # default.
     48 # The 'env -i' prevents that the environment variable MAKEFLAGS is passed down
     49 # to the child processes.
     50 all:
     51 	@echo 'direct compat'
     52 	@set +e; env -i "PATH=$$PATH" ${MAKE} -r -f ${MAKEFILE} -k direct; echo "exited $$?"
     53 	@echo
     54 
     55 	@echo 'direct jobs'
     56 	@set +e; env -i "PATH=$$PATH" ${MAKE} -r -f ${MAKEFILE} -k direct -j1; echo "exited $$?"
     57 	@echo
     58 
     59 	@echo 'indirect compat'
     60 	@set +e; env -i "PATH=$$PATH" ${MAKE} -r -f ${MAKEFILE} -k indirect; echo "exited $$?"
     61 	@echo
     62 
     63 	@echo 'indirect jobs'
     64 	@set +e; env -i "PATH=$$PATH" ${MAKE} -r -f ${MAKEFILE} -k indirect -j1; echo "exited $$?"
     65 	@echo
     66 
     67 indirect: direct
     68 direct:
     69 	false
     70 
     71 # TODO: Mention the target that failed, maybe even the chain of targets.
     72 # expect: direct compat
     73 # expect: *** Error code 1 (continuing)
     74 # expect: exited 1
     75 
     76 # TODO: Add '(continuing)'.
     77 # expect: direct jobs
     78 # expect: *** [direct] Error code 1
     79 # expect: exited 1
     80 
     81 # TODO: Mention the target that failed, maybe even the chain of targets.
     82 # expect: indirect compat
     83 # expect: *** Error code 1 (continuing)
     84 # expect: exited 1
     85 
     86 # TODO: Add '(continuing)'.
     87 # TODO: Add 'not remade because of errors'.
     88 # expect: indirect jobs
     89 # expect: *** [direct] Error code 1
     90 # expect: exited 1
     91