Home | History | Annotate | Line # | Download | only in unit-tests
      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