2c3632d14f
Lots of code refactoring, simplification and cleanup. Lots of new unit-tests providing much higher code coverage. All courtesy of rillig at netbsd. Other significant changes: o new read-only variable .SHELL which provides the path of the shell used to run scripts (as defined by the .SHELL target). o variable parsing detects more errors. o new debug option -dl: LINT mode, does the equivalent of := for all variable assignments so that file and line number are reported for variable parse errors.
62 lines
1.8 KiB
Makefile
62 lines
1.8 KiB
Makefile
# $NetBSD: opt-m-include-dir.mk,v 1.4 2020/09/01 20:14:34 rillig Exp $
|
|
#
|
|
# 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
|
|
|
|
.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
|
|
|
|
.include <opt-m-step3.mk>
|
|
|
|
.elif ${.PARSEFILE:T} == "opt-m-step3.mk"
|
|
|
|
# This file is included by step2.mk.
|
|
|
|
step2:
|
|
@echo ok
|
|
|
|
.else
|
|
. error
|
|
.endif
|