Module Name:    src
Committed By:   rillig
Date:           Wed Aug 17 20:05:41 UTC 2022

Modified Files:
        src/usr.bin/make/unit-tests: opt-query.exp opt-query.mk

Log Message:
tests/make: demonstrate wrong exit status for '-q' (since 1994)

Reported by Jeroen Ruigrok van der Werven via private mail.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/make/unit-tests/opt-query.exp
cvs rdiff -u -r1.4 -r1.5 src/usr.bin/make/unit-tests/opt-query.mk

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/make/unit-tests/opt-query.exp
diff -u src/usr.bin/make/unit-tests/opt-query.exp:1.2 src/usr.bin/make/unit-tests/opt-query.exp:1.3
--- src/usr.bin/make/unit-tests/opt-query.exp:1.2	Wed Aug 19 05:13:18 2020
+++ src/usr.bin/make/unit-tests/opt-query.exp	Wed Aug 17 20:05:41 2022
@@ -1,2 +1,24 @@
+Making commands:
 command during parsing
-exit status 1
+commands: query status 1
+
+Making opt-query-file.out-of-date in compat mode:
+opt-query-file.out-of-date in compat mode: query status 1
+
+Making opt-query-file.up-to-date in compat mode:
+`opt-query-file.up-to-date' is up to date.
+opt-query-file.up-to-date in compat mode: query status 1
+
+Making phony in compat mode:
+phony in compat mode: query status 1
+
+Making opt-query-file.out-of-date in jobs mode:
+opt-query-file.out-of-date in jobs mode: query status 1
+
+Making opt-query-file.up-to-date in jobs mode:
+opt-query-file.up-to-date in jobs mode: query status 1
+
+Making phony in jobs mode:
+phony in jobs mode: query status 1
+
+exit status 0

Index: src/usr.bin/make/unit-tests/opt-query.mk
diff -u src/usr.bin/make/unit-tests/opt-query.mk:1.4 src/usr.bin/make/unit-tests/opt-query.mk:1.5
--- src/usr.bin/make/unit-tests/opt-query.mk:1.4	Mon Nov  9 20:50:56 2020
+++ src/usr.bin/make/unit-tests/opt-query.mk	Wed Aug 17 20:05:41 2022
@@ -1,4 +1,4 @@
-# $NetBSD: opt-query.mk,v 1.4 2020/11/09 20:50:56 rillig Exp $
+# $NetBSD: opt-query.mk,v 1.5 2022/08/17 20:05:41 rillig Exp $
 #
 # Tests for the -q command line option.
 #
@@ -6,7 +6,59 @@
 # None of the commands in the targets are run, not even those that are
 # prefixed with '+'.
 
-.MAKEFLAGS: -q
+# This test consists of several parts:
+#
+#	main		Delegates to the actual tests.
+#
+#	commands	Ensures that none of the targets is made.
+#
+#	variants	Ensures that the up-to-date status is correctly
+#			reported in both compat and jobs mode, and for several
+#			kinds of make targets.
+PART?=	main
+
+.if ${PART} == "main"
+
+all: .PHONY variants cleanup
+
+_!=	touch -f opt-query-file.up-to-date
+
+variants: .PHONY
+.  for target in commands
+	@echo 'Making ${target}':
+	@${MAKE} -r -f ${MAKEFILE} -q ${mode:Mjobs:%=-j1} ${target} PART=commands \
+	&& echo "${target}: query status $$?" \
+	|| echo "${target}: query status $$?"
+	@echo
+.  endfor
+.  for mode in compat jobs
+.    for target in opt-query-file.out-of-date opt-query-file.up-to-date phony
+	@echo 'Making ${target} in ${mode} mode':
+	@${MAKE} -r -f ${MAKEFILE} -q ${mode:Mjobs:%=-j1} ${target} PART=variants \
+	&& echo "${target} in ${mode} mode: query status $$?" \
+	|| echo "${target} in ${mode} mode: query status $$?"
+	@echo
+.    endfor
+.  endfor
+
+# expect: opt-query-file.out-of-date in compat mode: query status 1
+
+# FIXME: must be 0, not 1.
+# expect: opt-query-file.up-to-date in compat mode: query status 1
+
+# expect: phony in compat mode: query status 1
+
+# expect: opt-query-file.out-of-date in jobs mode: query status 1
+
+# FIXME: must be 0, not 1.
+# expect: opt-query-file.up-to-date in jobs mode: query status 1
+
+# expect: phony in jobs mode: query status 1
+
+cleanup: .PHONY
+	@rm -f opt-query-file.up-to-date
+
+.elif ${PART} == "commands"
 
 # This command cannot be prevented from being run since it is used at parse
 # time, and any later variable assignments may depend on its result.
@@ -18,9 +70,18 @@
 	@+echo '$@: run always'
 
 # None of these commands are run.
-all:
+commands:
 	@echo '$@: hidden command'
 	@+echo '$@: run always'
-
-# The exit status 1 is because the "all" target has to be made, that is,
+# The exit status 1 is because the "commands" target has to be made, that is,
 # it is not up-to-date.
+
+.elif ${PART} == "variants"
+
+opt-query-file.out-of-date: ${MAKE}
+opt-query-file.up-to-date: ${MAKE}
+phony: .PHONY
+
+.else
+.  error Invalid part '${PART}'
+.endif

Reply via email to