1 1.3 rillig # $NetBSD: varname-dot-make-mode.mk,v 1.3 2022/05/07 17:49:47 rillig Exp $ 2 1.1 rillig # 3 1.2 rillig # Tests for the special .MAKE.MODE variable. 4 1.1 rillig 5 1.3 rillig # TODO: test .MAKE.MODE "meta", or see meta mode tests. 6 1.3 rillig # TODO: test .MAKE.MODE "compat" 7 1.1 rillig 8 1.3 rillig 9 1.3 rillig # See Makefile, POSTPROC for the postprocessing that takes place. 10 1.3 rillig # See the .rawout file for the raw output before stripping the digits. 11 1.3 rillig all: .PHONY make-mode-randomize-targets 12 1.3 rillig 13 1.3 rillig 14 1.3 rillig # By adding the word "randomize-targets" to the variable .MAKE.MODE, the 15 1.3 rillig # targets are not made in declaration order, but rather in random order. This 16 1.3 rillig # mode helps to find undeclared dependencies between files. 17 1.3 rillig # 18 1.3 rillig # History 19 1.3 rillig # Added on 2022-05-07. 20 1.3 rillig # 21 1.3 rillig # See also 22 1.3 rillig # https://gnats.netbsd.org/45226 23 1.3 rillig make-mode-randomize-targets: .PHONY 24 1.3 rillig @echo "randomize compat mode:" 25 1.3 rillig @${MAKE} -r -f ${MAKEFILE} randomize-targets 26 1.3 rillig 27 1.3 rillig @echo "randomize jobs mode (-j1):" 28 1.3 rillig @${MAKE} -r -f ${MAKEFILE} -j1 randomize-targets 29 1.3 rillig 30 1.3 rillig @echo "randomize jobs mode (-j5):" 31 1.3 rillig @${MAKE} -r -f ${MAKEFILE} -j5 randomize-targets | grep '^:' 32 1.3 rillig 33 1.3 rillig .if make(randomize-targets) 34 1.3 rillig randomize-targets: .WAIT a1 a2 a3 .WAIT b1 b2 b3 .WAIT c1 c2 c3 .WAIT 35 1.3 rillig a1 a2 a3 b1 b2 b3 c1 c2 c3: 36 1.3 rillig : Making ${.TARGET} 37 1.3 rillig 38 1.3 rillig # .MAKE.MODE is evaluated after parsing all files, so it suffices to switch 39 1.3 rillig # the mode after defining the targets. 40 1.3 rillig .MAKE.MODE+= randomize-targets 41 1.3 rillig .endif 42