1 # $NetBSD: opt-query.mk,v 1.7 2022/08/18 05:37:05 rillig Exp $ 2 # 3 # Tests for the -q command line option. 4 # 5 # The -q option only looks at the dependencies between the targets. 6 # None of the commands in the targets are run, not even those that are 7 # prefixed with '+'. 8 9 # This test consists of several parts: 10 # 11 # main Delegates to the actual tests. 12 # 13 # commands Ensures that none of the targets is made. 14 # 15 # variants Ensures that the up-to-date status is correctly 16 # reported in both compat and jobs mode, and for several 17 # kinds of make targets. 18 PART?= main 19 20 .if ${PART} == "main" 21 22 all: .PHONY variants cleanup 23 24 _!= touch -f opt-query-file.up-to-date 25 26 variants: .PHONY 27 28 . for target in commands 29 @echo 'Making ${target}': 30 @${MAKE} -r -f ${MAKEFILE} -q ${mode:Mjobs:%=-j1} ${target} PART=commands \ 31 && echo "${target}: query status $$?" \ 32 || echo "${target}: query status $$?" 33 @echo 34 . endfor 35 36 . for mode in compat jobs 37 . for target in opt-query-file.out-of-date opt-query-file.up-to-date phony 38 @echo 'Making ${target} in ${mode} mode': 39 @${MAKE} -r -f ${MAKEFILE} -q ${mode:Mjobs:%=-j1} ${target} PART=variants \ 40 && echo "${target} in ${mode} mode: query status $$?" \ 41 || echo "${target} in ${mode} mode: query status $$?" 42 @echo 43 . endfor 44 . endfor 45 46 # Between 1994 and before 2022-08-17, the exit status for '-q' was always 1, 47 # the cause for that exit code varied over time though. 48 # 49 # expect: opt-query-file.out-of-date in compat mode: query status 1 50 # expect: opt-query-file.up-to-date in compat mode: query status 0 51 # expect: phony in compat mode: query status 1 52 # expect: opt-query-file.out-of-date in jobs mode: query status 1 53 # expect: opt-query-file.up-to-date in jobs mode: query status 0 54 # expect: phony in jobs mode: query status 1 55 56 cleanup: .PHONY 57 @rm -f opt-query-file.up-to-date 58 59 .elif ${PART} == "commands" 60 61 # This command cannot be prevented from being run since it is used at parse 62 # time, and any later variable assignments may depend on its result. 63 != echo 'command during parsing' 1>&2; echo 64 65 # None of these commands are run. 66 .BEGIN: 67 @echo '$@: hidden command' 68 @+echo '$@: run always' 69 70 # None of these commands are run. 71 commands: 72 @echo '$@: hidden command' 73 @+echo '$@: run always' 74 # The exit status 1 is because the "commands" target has to be made, that is, 75 # it is not up-to-date. 76 77 .elif ${PART} == "variants" 78 79 opt-query-file.out-of-date: ${MAKEFILE} 80 opt-query-file.up-to-date: ${MAKEFILE} 81 phony: .PHONY 82 83 .else 84 . error Invalid part '${PART}' 85 .endif 86