Module Name: src
Committed By: rillig
Date: Tue Sep 1 20:14:34 UTC 2020
Modified Files:
src/usr.bin/make/unit-tests: opt-m-include-dir.exp opt-m-include-dir.mk
Log Message:
make(1): add test for the -m option, the special .../ path
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/usr.bin/make/unit-tests/opt-m-include-dir.exp
cvs rdiff -u -r1.3 -r1.4 src/usr.bin/make/unit-tests/opt-m-include-dir.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-m-include-dir.exp
diff -u src/usr.bin/make/unit-tests/opt-m-include-dir.exp:1.1 src/usr.bin/make/unit-tests/opt-m-include-dir.exp:1.2
--- src/usr.bin/make/unit-tests/opt-m-include-dir.exp:1.1 Sun Aug 16 12:07:51 2020
+++ src/usr.bin/make/unit-tests/opt-m-include-dir.exp Tue Sep 1 20:14:34 2020
@@ -1 +1,2 @@
+ok
exit status 0
Index: src/usr.bin/make/unit-tests/opt-m-include-dir.mk
diff -u src/usr.bin/make/unit-tests/opt-m-include-dir.mk:1.3 src/usr.bin/make/unit-tests/opt-m-include-dir.mk:1.4
--- src/usr.bin/make/unit-tests/opt-m-include-dir.mk:1.3 Tue Sep 1 19:17:58 2020
+++ src/usr.bin/make/unit-tests/opt-m-include-dir.mk Tue Sep 1 20:14:34 2020
@@ -1,25 +1,61 @@
-# $NetBSD: opt-m-include-dir.mk,v 1.3 2020/09/01 19:17:58 rillig Exp $
+# $NetBSD: opt-m-include-dir.mk,v 1.4 2020/09/01 20:14:34 rillig Exp $
#
-# Tests for the -m command line option.
+# Tests for the -m command line option, which adds a directory to the
+# search path for the .include <...> directive.
+#
+# The .../canary.mk special argument starts searching in the current
+# directory and walks towards the file system root, until it finds a
+# directory that contains a file called canary.mk.
+#
+# To set up this scenario, the file step2.mk is created deep in a hierarchy
+# of subdirectories. Another file called opt-m-step3.mk is created a few
+# steps up in the directory hierarchy, serving as the canary file.
+#
+# Next to the canary file, there is opt-m-step3.mk. This file is found
+# by mentioning its simple name in an .include directive. It defines the
+# target "step2" that is needed by "step2.mk".
+
+.if ${.PARSEFILE:T} == "opt-m-include-dir.mk"
+
+# Set up the other files needed for this test.
+
+TEST_DIR:= ${.PARSEFILE:R}.tmp/sub/sub/sub/workdir
+CANARY_FILE:= ${.PARSEFILE:R}.tmp/sub/opt-m-canary.mk
+ACTUAL_FILE:= ${.PARSEFILE:R}.tmp/sub/opt-m-step3.mk
+
+_!= mkdir -p ${TEST_DIR}
+_!= > ${CANARY_FILE}
+_!= cp ${MAKEFILE} ${TEST_DIR}/step2.mk
+_!= cp ${MAKEFILE} ${ACTUAL_FILE}
+
+step1:
+ @${.MAKE} -C ${TEST_DIR} -f step2.mk step2
+
+.END:
+ @rm -rf ${MAKEFILE:R}.tmp
-.MAKEFLAGS: -m .../buf.c
+.elif ${.PARSEFILE:T} == "step2.mk"
+
+# This is the file deep in the directory hierarchy. It sets up the
+# search path for the .include <...> directive and then includes a
+# single file from that search path.
+
+# This option adds .tmp/sub to the search path for .include <...>.
+.MAKEFLAGS: -m .../opt-m-canary.mk
+
+# This option does not add any directory to the search path since the
+# canary file does not exist.
.MAKEFLAGS: -m .../does-not-exist
-.MAKEFLAGS: -m .../${.PARSEFILE:T}
-# Whether or not buf.c exists depends on whether the source code of make
-# is available. When running the tests in src/usr.bin/make, it succeeds,
-# and when running the tests in src/tests/usr.bin/make, it fails.
+.include <opt-m-step3.mk>
-# This file should never exist.
-.if exists(does-not-exist)
-. error
-.endif
+.elif ${.PARSEFILE:T} == "opt-m-step3.mk"
+
+# This file is included by step2.mk.
-# This test assumes that this test is run in the same directory as the
-# test file.
-.if !exists(${.PARSEFILE})
+step2:
+ @echo ok
+
+.else
. error
.endif
-
-all:
- @:;