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