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