aboutsummaryrefslogtreecommitdiff
path: root/share/mk/dirdeps.mk
diff options
context:
space:
mode:
Diffstat (limited to 'share/mk/dirdeps.mk')
-rw-r--r--share/mk/dirdeps.mk32
1 files changed, 23 insertions, 9 deletions
diff --git a/share/mk/dirdeps.mk b/share/mk/dirdeps.mk
index 5cb936003fcb5..68ddd21556475 100644
--- a/share/mk/dirdeps.mk
+++ b/share/mk/dirdeps.mk
@@ -1,5 +1,5 @@
# $FreeBSD$
-# $Id: dirdeps.mk,v 1.96 2018/06/20 22:26:39 sjg Exp $
+# $Id: dirdeps.mk,v 1.100 2019/11/12 06:47:58 sjg Exp $
# Copyright (c) 2010-2013, Juniper Networks, Inc.
# All rights reserved.
@@ -379,7 +379,8 @@ DIRDEPS_FILTER += M${_DEP_RELDIR}
.endif
# this is what we run below
-DIRDEP_MAKE?= ${.MAKE}
+DIRDEP_MAKE ?= ${.MAKE}
+DIRDEP_DIR ?= ${.TARGET:R}
# we suppress SUBDIR when visiting the leaves
# we assume sys.mk will set MACHINE_ARCH
@@ -389,10 +390,11 @@ _DIRDEP_USE: .USE .MAKE
@for m in ${.MAKE.MAKEFILE_PREFERENCE}; do \
test -s ${.TARGET:R}/$$m || continue; \
echo "${TRACER}Checking ${.TARGET:R} for ${.TARGET:E} ..."; \
+ ${DIRDEP_USE_PRELUDE} \
MACHINE_ARCH= NO_SUBDIR=1 ${DIRDEP_USE_ENV} \
TARGET_SPEC=${.TARGET:E} \
MACHINE=${.TARGET:E} \
- ${DIRDEP_MAKE} -C ${.TARGET:R} || exit 1; \
+ ${DIRDEP_MAKE} -C ${DIRDEP_DIR} || exit 1; \
break; \
done
@@ -476,7 +478,7 @@ BUILD_DIRDEPS_TARGETS ?= ${.TARGETS}
${DIRDEPS_CACHE}: .META .NOMETA_CMP
+@{ echo '# Autogenerated - do NOT edit!'; echo; \
echo 'BUILD_DIRDEPS=no'; echo; \
- echo '.include <dirdeps.mk>'; \
+ echo '.include <dirdeps.mk>'; echo; \
} > ${.TARGET}.new
+@MAKELEVEL=${.MAKE.LEVEL} DIRDEPS_CACHE=${DIRDEPS_CACHE} \
DIRDEPS="${DIRDEPS}" \
@@ -640,9 +642,15 @@ _build_all_dirs := ${_build_all_dirs:O:u}
.if ${.MAKEFLAGS:M-V${_V_READ_DIRDEPS}} == ""
.if !empty(_build_all_dirs)
.if ${BUILD_DIRDEPS_CACHE} == "yes"
-x!= { echo; echo '\# ${DEP_RELDIR}.${DEP_TARGET_SPEC}'; \
- echo 'dirdeps: ${_build_all_dirs:${M_oneperline}}'; echo; } >&3; echo
-x!= { ${_build_all_dirs:@x@${target($x):?:echo '$x: _DIRDEP_USE';}@} echo; } >&3; echo
+# guard against _build_all_dirs being too big for a single command line
+# first get list of dirs that need _DIRDEP_USE
+# then export that and _build_all_dirs
+_new_dirdeps := ${_build_all_dirs:@x@${target($x):?:$x}@}
+.export _new_dirdeps _build_all_dirs
+x!= echo; { echo '\# ${DEP_RELDIR}.${DEP_TARGET_SPEC}'; \
+ echo "dirdeps: \\"; \
+ for x in $$_build_all_dirs; do echo " $$x \\"; done; echo; \
+ for x in $$_new_dirdeps; do echo "$$x: _DIRDEP_USE"; done; echo; } >&3
.if !empty(DEP_EXPORT_VARS)
# Discouraged, but there are always exceptions.
# Handle it here rather than explain how.
@@ -672,7 +680,10 @@ DEP_EXPORT_VARS=
.info ${DEP_RELDIR}.$m: graph: ${_build_dirs:M*.$q}
.endif
.if ${BUILD_DIRDEPS_CACHE} == "yes"
-x!= { echo; echo '${_this_dir}.$m: ${_build_dirs:M*.$q:${M_oneperline}}'; echo; } >&3; echo
+_cache_deps := ${_build_dirs:M*.$q}
+.export _cache_deps
+x!= echo; { echo "${_this_dir}.$m: \\"; \
+ for x in $$_cache_deps; do echo " $$x \\"; done; echo; } >&3
.else
${_this_dir}.$m: ${_build_dirs:M*.$q}
.endif
@@ -682,7 +693,10 @@ ${_this_dir}.$m: ${_build_dirs:M*.$q}
.info ${DEP_RELDIR}.$m: graph: ${_build_dirs:M*.$m:N${_this_dir}.$m}
.endif
.if ${BUILD_DIRDEPS_CACHE} == "yes"
-x!= { echo; echo '${_this_dir}.$m: ${_build_dirs:M*.$m:N${_this_dir}.$m:${M_oneperline}}'; echo; } >&3; echo
+_cache_deps := ${_build_dirs:M*.$m:N${_this_dir}.$m}
+.export _cache_deps
+x!= echo; { echo "${_this_dir}.$m: \\"; \
+ for x in $$_cache_deps; do echo " $$x \\"; done; echo; } >&3
.else
${_this_dir}.$m: ${_build_dirs:M*.$m:N${_this_dir}.$m}
.endif