summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsjg <sjg@FreeBSD.org>2016-04-18 20:56:21 +0000
committersjg <sjg@FreeBSD.org>2016-04-18 20:56:21 +0000
commit5c27d86f778aa8b18f17e8c4e62b679a4e5aab49 (patch)
tree126f534bc2d7f3205ef8222ddca1f1fed4dcb78e
parent6a3325bc6897fdab8da0a1fdcd6609a3602a6593 (diff)
downloadFreeBSD-src-5c27d86f778aa8b18f17e8c4e62b679a4e5aab49.zip
FreeBSD-src-5c27d86f778aa8b18f17e8c4e62b679a4e5aab49.tar.gz
Update dirdeps.mk et al
dirdeps.mk: move logic to handle -f dirdeps.mk to inside check for first read of dirdeps.mk Also fix handling of WITHOUT_DIRDEPS_BELOW gendirdeps.mk: pass M2D_EXCLUDES to meta2deps meta.autodep.mk: if we build with nofilemon, leave a cookie to prevent updating dependencies until cleaned. Reviewed by: bdrewery
-rw-r--r--share/mk/dirdeps.mk45
-rw-r--r--share/mk/gendirdeps.mk6
-rw-r--r--share/mk/meta.autodep.mk17
3 files changed, 47 insertions, 21 deletions
diff --git a/share/mk/dirdeps.mk b/share/mk/dirdeps.mk
index a97d489..f2e006c 100644
--- a/share/mk/dirdeps.mk
+++ b/share/mk/dirdeps.mk
@@ -122,6 +122,23 @@ _DIRDEP_USE_LEVEL?= 0
# and non-specific Makefile.depend*
.if !target(_DIRDEP_USE)
+
+.if ${MAKEFILE:T} == ${.PARSEFILE} && empty(DIRDEPS) && ${.TARGETS:Uall:M*/*} != ""
+# This little trick let's us do
+#
+# mk -f dirdeps.mk some/dir.${TARGET_SPEC}
+#
+all:
+${.TARGETS:Nall}: all
+DIRDEPS := ${.TARGETS:M*[/.]*}
+# so that -DNO_DIRDEPS works
+DEP_RELDIR := ${DIRDEPS:[1]:R}
+# this will become DEP_MACHINE below
+TARGET_MACHINE := ${DIRDEPS:[1]:E:C/,.*//}
+# disable DIRDEPS_CACHE as it does not like this trick
+MK_DIRDEPS_CACHE = no
+.endif
+
# make sure we get the behavior we expect
.MAKE.SAVE_DOLLARS = no
@@ -245,20 +262,6 @@ DEP_${TARGET_SPEC_VARS:[$i]} := ${_tspec:[$i]}
DEP_MACHINE := ${_DEP_TARGET_SPEC}
.endif
-.if ${MAKEFILE:T} == ${.PARSEFILE} && empty(DIRDEPS) && ${.TARGETS:Uall:M*/*} != ""
-# This little trick let's us do
-#
-# mk -f dirdeps.mk some/dir.${TARGET_SPEC}
-#
-all:
-${.TARGETS:Nall}: all
-DIRDEPS := ${.TARGETS:M*/*}
-# so that -DNO_DIRDEPS works
-DEP_RELDIR := ${DIRDEPS:R:[1]}
-# disable DIRDEPS_CACHE as it does not like this trick
-MK_DIRDEPS_CACHE = no
-.endif
-
# reset each time through
_build_all_dirs =
@@ -285,7 +288,7 @@ _DEP_RELDIR := ${DEP_RELDIR}
# pickup customizations
# as below you can use !target(_DIRDEP_USE) to protect things
# which should only be done once.
-.-include "local.dirdeps.mk"
+.-include <local.dirdeps.mk>
.if !target(_DIRDEP_USE)
# things we skip for host tools
@@ -305,7 +308,13 @@ DEP_SKIP_DIR = ${SKIP_DIR} \
NSkipDir = ${DEP_SKIP_DIR:${M_ListToSkip}}
-.if defined(NO_DIRDEPS) || defined(NODIRDEPS) || defined(WITHOUT_DIRDEPS)
+.if defined(NODIRDEPS) || defined(WITHOUT_DIRDEPS)
+NO_DIRDEPS =
+.elif defined(WITHOUT_DIRDEPS_BELOW)
+NO_DIRDEPS_BELOW =
+.endif
+
+.if defined(NO_DIRDEPS)
# confine ourselves to the original dir and below.
DIRDEPS_FILTER += M${_DEP_RELDIR}*
.elif defined(NO_DIRDEPS_BELOW)
@@ -371,7 +380,7 @@ MK_DIRDEPS_CACHE ?= no
BUILD_DIRDEPS_CACHE ?= no
BUILD_DIRDEPS ?= yes
-.if !defined(NO_DIRDEPS)
+.if !defined(NO_DIRDEPS) && !defined(NO_DIRDEPS_BELOW)
.if ${MK_DIRDEPS_CACHE} == "yes"
# this is where we will cache all our work
DIRDEPS_CACHE?= ${_OBJDIR}/dirdeps.cache${.TARGETS:Nall:O:u:ts-:S,/,_,g:S,^,.,:N.}
@@ -453,7 +462,7 @@ _this_dir := ${SRCTOP}/${DEP_RELDIR}
# on rare occasions, there can be a need for extra help
_dep_hack := ${_this_dir}/${.MAKE.DEPENDFILE_PREFIX}.inc
-.-include "${_dep_hack}"
+.-include <${_dep_hack}>
.if ${DEP_RELDIR} != ${_DEP_RELDIR} || ${DEP_TARGET_SPEC} != ${TARGET_SPEC}
# this should be all
diff --git a/share/mk/gendirdeps.mk b/share/mk/gendirdeps.mk
index cacb570..4de2c4c 100644
--- a/share/mk/gendirdeps.mk
+++ b/share/mk/gendirdeps.mk
@@ -83,7 +83,7 @@ META_FILES := ${META_FILES:T:O:u}
.export META_FILES
# pickup customizations
-.-include "local.gendirdeps.mk"
+.-include <local.gendirdeps.mk>
# these are actually prefixes that we'll skip
# they should all be absolute paths
@@ -139,7 +139,8 @@ META2DEPS_CMD += -T ${TARGET_OBJ_SPEC}
.endif
META2DEPS_CMD += \
-R ${RELDIR} -H ${HOST_TARGET} \
- ${M2D_OBJROOTS:O:u:@o@-O $o@}
+ ${M2D_OBJROOTS:O:u:@o@-O $o@} \
+ ${M2D_EXCLUDES:O:u:@o@-X $o@} \
M2D_OBJROOTS += ${OBJTOP} ${_OBJROOT} ${_objroot}
@@ -256,6 +257,7 @@ DIRDEPS := ${DIRDEPS:${GENDIRDEPS_FILTER:UNno:ts:}:C,//+,/,g:O:u}
.if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != ""
.info ${RELDIR}: M2D_OBJROOTS=${M2D_OBJROOTS}
+.info ${RELDIR}: M2D_EXCLUDES=${M2D_EXCLUDES}
.info ${RELDIR}: dir_list='${dir_list}'
.info ${RELDIR}: dpadd_dir_list='${dpadd_dir_list}'
.info ${RELDIR}: dirdep_list='${dirdep_list}'
diff --git a/share/mk/meta.autodep.mk b/share/mk/meta.autodep.mk
index ac0c408..aa6c2d5 100644
--- a/share/mk/meta.autodep.mk
+++ b/share/mk/meta.autodep.mk
@@ -19,7 +19,7 @@ _this ?= ${.PARSEFILE}
.if !target(__${_this}__)
__${_this}__: .NOTMAIN
-.-include "local.autodep.mk"
+.-include <local.autodep.mk>
.if defined(SRCS)
# it would be nice to be able to query .SUFFIXES
@@ -56,6 +56,21 @@ _OBJTOP ?= ${OBJTOP}
_OBJROOT ?= ${OBJROOT:U${_OBJTOP}}
_DEPENDFILE := ${_CURDIR}/${.MAKE.DEPENDFILE:T}
+.if ${.MAKE.LEVEL} > 0 || ${BUILD_AT_LEVEL0:Uyes:tl} == "yes"
+# do not allow auto update if we ever built this dir without filemon
+NO_FILEMON_COOKIE = .nofilemon
+CLEANFILES += ${NO_FILEMON_COOKIE}
+.if ${.MAKE.MODE:Uno:Mnofilemon} != ""
+UPDATE_DEPENDFILE = NO
+all: ${NO_FILEMON_COOKIE}
+${NO_FILEMON_COOKIE}: .NOMETA
+ @echo UPDATE_DEPENDFILE=NO > ${.TARGET}
+.elif exists(${NO_FILEMON_COOKIE})
+UPDATE_DEPENDFILE = NO
+.warning ${RELDIR} built with nofilemon; UPDATE_DEPENDFILE=NO
+.endif
+.endif
+
.if ${.MAKE.LEVEL} == 0
.if ${BUILD_AT_LEVEL0:Uyes:tl} == "no"
UPDATE_DEPENDFILE = NO
OpenPOWER on IntegriCloud