xref: /freebsd/share/mk/local.sys.mk (revision 13ea0450a9c8742119d36f3bf8f47accdce46e54)
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 \(.*\),\1;,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.if !empty(LIBDIR)
46_PREMK_LIBDIR:=	${LIBDIR}
47.endif
48
49.include "src.sys.mk"
50
51.if ${.MAKE.MODE:Mmeta*} != ""
52# we can afford to use cookies to prevent some targets
53# re-running needlessly but only when using filemon.
54# Targets that should support the meta mode cookie handling should just be
55# added to META_TARGETS.  If bsd.sys.mk cannot be included then ${META_DEPS}
56# should be added as a target dependency as well.  Otherwise the target
57# is added to in bsd.sys.mk since it comes last.
58.if ${.MAKE.MODE:Mnofilemon} == ""
59# Prepend .OBJDIR if not already there.
60_META_COOKIE_COND=	"${.TARGET:M${.OBJDIR}/*}" == ""
61_META_COOKIE_DEFAULT=	${${_META_COOKIE_COND}:?${.OBJDIR}/${.TARGET}:${.TARGET}}
62# Use the default if COOKIE.${.TARGET} is not defined.
63META_COOKIE=		${COOKIE.${.TARGET}:U${_META_COOKIE_DEFAULT}}
64META_COOKIE_RM=		@rm -f ${META_COOKIE}
65META_COOKIE_TOUCH=	@touch ${META_COOKIE}
66CLEANFILES+=		${META_TARGETS}
67_meta_dep_before:	.USEBEFORE .NOTMAIN
68	${META_COOKIE_RM}
69_meta_dep_after:	.USE .NOTMAIN
70	${META_COOKIE_TOUCH}
71# Attach this to a target to allow it to benefit from meta mode's
72# not rerunning a command if it doesn't need to be considering its
73# metafile/filemon-tracked dependencies.
74META_DEPS=	_meta_dep_before _meta_dep_after .META
75.endif
76.else
77# some targets need to be .PHONY - but not in meta mode
78META_NOPHONY=	.PHONY
79.endif
80META_NOPHONY?=
81META_COOKIE_RM?=
82META_COOKIE_TOUCH?=
83META_DEPS+=	${META_NOPHONY}
84