Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

# $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