freebsd-dev/contrib/bmake/unit-tests/opt-m-include-dir.mk
Simon J. Gerraty 2c3632d14f Update to bmake-20200902
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.
2020-09-05 19:29:42 +00:00

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