summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorbdrewery <bdrewery@FreeBSD.org>2017-01-03 17:16:13 +0000
committerbdrewery <bdrewery@FreeBSD.org>2017-01-03 17:16:13 +0000
commit051f5d03f61ba722850ad37e597186933aa21dae (patch)
tree8243b22dc7eafdd9a1579c7d072c6003890eb3a3 /share
parent5df83a3fc7480f81535cc69515ec073d7a30fbbd (diff)
downloadFreeBSD-src-051f5d03f61ba722850ad37e597186933aa21dae.zip
FreeBSD-src-051f5d03f61ba722850ad37e597186933aa21dae.tar.gz
MFC r305095:
AUTO_OBJ: Support SRCS/DPSRCS that contain '/' and require a nested OBJDIR.
Diffstat (limited to 'share')
-rw-r--r--share/mk/bsd.obj.mk24
1 files changed, 24 insertions, 0 deletions
diff --git a/share/mk/bsd.obj.mk b/share/mk/bsd.obj.mk
index 14b22e9..db63b2e 100644
--- a/share/mk/bsd.obj.mk
+++ b/share/mk/bsd.obj.mk
@@ -51,6 +51,30 @@ CANONICALOBJDIR= ${.OBJDIR}
# but this makefile does not want it!
.OBJDIR: ${.CURDIR}
.endif
+# Handle special case where SRCS is full-pathed and requires
+# nested objdirs. This duplicates some auto.obj.mk logic.
+.if (!empty(SRCS:M*/*) || !empty(DPSRCS:M*/*)) && \
+ (${.TARGETS} == "" || ${.TARGETS:Nclean*:N*clean:Ndestroy*} != "")
+_wantdirs= ${SRCS:M*/*:H} ${DPSRCS:M*/*:H}
+.if !empty(_wantdirs)
+_wantdirs:= ${_wantdirs:O:u}
+_needdirs=
+.for _dir in ${_wantdirs}
+.if !exists(${.OBJDIR}/${_dir}/)
+_needdirs+= ${_dir}
+.endif
+.endfor
+.endif
+.if !empty(_needdirs)
+#_mkneededdirs!= umask ${OBJDIR_UMASK:U002}; ${Mkdirs} ${_needdirs}
+__objdir_made != umask ${OBJDIR_UMASK:U002}; ${Mkdirs}; \
+ for dir in ${_needdirs}; do \
+ dir=${.OBJDIR}/$${dir}; \
+ ${ECHO_TRACE} "[Creating nested objdir $${dir}...]" >&2; \
+ Mkdirs $${dir}; \
+ done
+.endif
+.endif # !empty(SRCS:M*/*) || !empty(DPSRCS:M*/*)
.elif defined(MAKEOBJDIRPREFIX)
CANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR}
.elif defined(MAKEOBJDIR) && ${MAKEOBJDIR:M/*} != ""
OpenPOWER on IntegriCloud