xref: /freebsd/share/mk/local.sys.mk (revision 264104f26834fdb27974e0c5fdedf8f2f5a90383)
1# $FreeBSD$
2
3.if ${MK_DIRDEPS_BUILD} == "yes" || ${MK_META_MODE} == "yes"
4
5# Not in the below list as it may make sense for non-meta mode
6# eventually.  meta.sys.mk (DIRDEPS_BUILD) also already adds these in.
7.if ${MK_DIRDEPS_BUILD} == "no" && ${MK_META_MODE} == "yes"
8MAKE_PRINT_VAR_ON_ERROR += \
9	.ERROR_TARGET \
10	.ERROR_META_FILE \
11	.MAKE.LEVEL \
12	MAKEFILE \
13	.MAKE.MODE
14.endif
15
16_ERROR_CMD_EXEC=	${sed -n '/^CMD/s,^CMD ,,p' ${.ERROR_META_FILE}:L:sh}
17_ERROR_CMD=		${!empty(.ERROR_META_FILE):?${_ERROR_CMD_EXEC}:.PHONY}
18MAKE_PRINT_VAR_ON_ERROR+= \
19	_ERROR_CMD \
20	.CURDIR \
21	.MAKE \
22	.OBJDIR \
23	.TARGETS \
24	DESTDIR \
25	LD_LIBRARY_PATH \
26	MACHINE \
27	MACHINE_ARCH \
28	MAKEOBJDIRPREFIX \
29	MAKESYSPATH \
30	MAKE_VERSION \
31	PATH \
32	SRCTOP \
33	OBJTOP \
34	${MAKE_PRINT_VAR_ON_ERROR_XTRAS}
35
36.if ${.MAKE.LEVEL} > 0
37MAKE_PRINT_VAR_ON_ERROR += .MAKE.MAKEFILES .PATH
38.endif
39.endif
40
41.if !empty(.OBJDIR)
42OBJTOP?= ${.OBJDIR:S,${.CURDIR},,}${SRCTOP}
43.endif
44
45.include "src.sys.mk"
46
47.if ${.MAKE.MODE:Mmeta*} != ""
48# we can afford to use cookies to prevent some targets
49# re-running needlessly but only when using filemon.
50# Targets that should support the meta mode cookie handling should just be
51# added to META_TARGETS.  If bsd.sys.mk cannot be included then ${META_DEPS}
52# should be added as a target dependency as well.  Otherwise the target
53# is added to in bsd.sys.mk since it comes last.
54.if ${.MAKE.MODE:Mnofilemon} == ""
55# Prepend .OBJDIR if not already there.
56_META_COOKIE_COND=	"${.TARGET:M${.OBJDIR}/*}" == ""
57_META_COOKIE_DEFAULT=	${${_META_COOKIE_COND}:?${.OBJDIR}/${.TARGET}:${.TARGET}}
58# Use the default if COOKIE.${.TARGET} is not defined.
59META_COOKIE=		${COOKIE.${.TARGET}:U${_META_COOKIE_DEFAULT}}
60META_COOKIE_RM=		@rm -f ${META_COOKIE}
61META_COOKIE_TOUCH=	@touch ${META_COOKIE}
62CLEANFILES+=		${META_TARGETS}
63_meta_dep_before:	.USEBEFORE .NOTMAIN
64	${META_COOKIE_RM}
65_meta_dep_after:	.USE .NOTMAIN
66	${META_COOKIE_TOUCH}
67# Attach this to a target to allow it to benefit from meta mode's
68# not rerunning a command if it doesn't need to be considering its
69# metafile/filemon-tracked dependencies.
70META_DEPS=	_meta_dep_before _meta_dep_after .META
71.endif
72.else
73# some targets need to be .PHONY - but not in meta mode
74META_NOPHONY=	.PHONY
75.endif
76META_NOPHONY?=
77META_COOKIE_RM?=
78META_COOKIE_TOUCH?=
79META_DEPS+=	${META_NOPHONY}
80