| @@ -1,25 +1,61 @@ | | | @@ -1,25 +1,61 @@ |
1 | # $NetBSD: opt-m-include-dir.mk,v 1.3 2020/09/01 19:17:58 rillig Exp $ | | 1 | # $NetBSD: opt-m-include-dir.mk,v 1.4 2020/09/01 20:14:34 rillig Exp $ |
2 | # | | 2 | # |
3 | # Tests for the -m command line option. | | 3 | # Tests for the -m command line option, which adds a directory to the |
| | | 4 | # search path for the .include <...> directive. |
| | | 5 | # |
| | | 6 | # The .../canary.mk special argument starts searching in the current |
| | | 7 | # directory and walks towards the file system root, until it finds a |
| | | 8 | # directory that contains a file called canary.mk. |
| | | 9 | # |
| | | 10 | # To set up this scenario, the file step2.mk is created deep in a hierarchy |
| | | 11 | # of subdirectories. Another file called opt-m-step3.mk is created a few |
| | | 12 | # steps up in the directory hierarchy, serving as the canary file. |
| | | 13 | # |
| | | 14 | # Next to the canary file, there is opt-m-step3.mk. This file is found |
| | | 15 | # by mentioning its simple name in an .include directive. It defines the |
| | | 16 | # target "step2" that is needed by "step2.mk". |
| | | 17 | |
| | | 18 | .if ${.PARSEFILE:T} == "opt-m-include-dir.mk" |
| | | 19 | |
| | | 20 | # Set up the other files needed for this test. |
| | | 21 | |
| | | 22 | TEST_DIR:= ${.PARSEFILE:R}.tmp/sub/sub/sub/workdir |
| | | 23 | CANARY_FILE:= ${.PARSEFILE:R}.tmp/sub/opt-m-canary.mk |
| | | 24 | ACTUAL_FILE:= ${.PARSEFILE:R}.tmp/sub/opt-m-step3.mk |
| | | 25 | |
| | | 26 | _!= mkdir -p ${TEST_DIR} |
| | | 27 | _!= > ${CANARY_FILE} |
| | | 28 | _!= cp ${MAKEFILE} ${TEST_DIR}/step2.mk |
| | | 29 | _!= cp ${MAKEFILE} ${ACTUAL_FILE} |
| | | 30 | |
| | | 31 | step1: |
| | | 32 | @${.MAKE} -C ${TEST_DIR} -f step2.mk step2 |
| | | 33 | |
| | | 34 | .END: |
| | | 35 | @rm -rf ${MAKEFILE:R}.tmp |
4 | | | 36 | |
5 | .MAKEFLAGS: -m .../buf.c | | 37 | .elif ${.PARSEFILE:T} == "step2.mk" |
| | | 38 | |
| | | 39 | # This is the file deep in the directory hierarchy. It sets up the |
| | | 40 | # search path for the .include <...> directive and then includes a |
| | | 41 | # single file from that search path. |
| | | 42 | |
| | | 43 | # This option adds .tmp/sub to the search path for .include <...>. |
| | | 44 | .MAKEFLAGS: -m .../opt-m-canary.mk |
| | | 45 | |
| | | 46 | # This option does not add any directory to the search path since the |
| | | 47 | # canary file does not exist. |
6 | .MAKEFLAGS: -m .../does-not-exist | | 48 | .MAKEFLAGS: -m .../does-not-exist |
7 | .MAKEFLAGS: -m .../${.PARSEFILE:T} | | | |
8 | | | 49 | |
9 | # Whether or not buf.c exists depends on whether the source code of make | | 50 | .include <opt-m-step3.mk> |
10 | # is available. When running the tests in src/usr.bin/make, it succeeds, | | | |
11 | # and when running the tests in src/tests/usr.bin/make, it fails. | | | |
12 | | | 51 | |
13 | # This file should never exist. | | 52 | .elif ${.PARSEFILE:T} == "opt-m-step3.mk" |
14 | .if exists(does-not-exist) | | 53 | |
15 | . error | | 54 | # This file is included by step2.mk. |
16 | .endif | | | |
17 | | | 55 | |
18 | # This test assumes that this test is run in the same directory as the | | 56 | step2: |
19 | # test file. | | 57 | @echo ok |
20 | .if !exists(${.PARSEFILE}) | | 58 | |
| | | 59 | .else |
21 | . error | | 60 | . error |
22 | .endif | | 61 | .endif |
23 | | | | |
24 | all: | | | |
25 | @:; | | | |