build - Support concurrent SUBDIR traversal, fix make depend bug
[dragonfly.git] / share / mk / bsd.dep.mk
index 6ad6e12..9384cdf 100644 (file)
@@ -105,7 +105,7 @@ ${_YC}: ${_YSRC}
 
 .if !target(depend)
 .if defined(SRCS)
-depend: beforedepend ${DEPENDFILE} afterdepend
+depend: beforedepend _dependincs ${DEPENDFILE} afterdepend
 
 # Different types of sources are compiled with slightly different flags.
 # Split up the sources, and filter out headers and non-applicable flags.
@@ -119,15 +119,27 @@ __FLAGS_FILES:=   ${__FLAGS_FILES:N${_FFILE}}
 .endfor
 .endfor
 
-_DEPENDFILES=  .depend__ ${FLAGS_GROUPS:S/^/.depend_/g}
+_DEPENDFILES=  ${FLAGS_GROUPS:S/^/.depend_/g}
 .ORDER: ${_DEPENDFILES}
 
 ${DEPENDFILE}: ${_DEPENDFILES}
-       cat ${_DEPENDFILES} > ${.TARGET}
-       -rm -f ${_DEPENDFILES}
+
+#
+# __FLAG_FILES is built from SRCS.  That means it will contain
+# also .h files and other files that are not direct sources, but which
+# might be required to even run mkdep.  This is important if those are
+# generated as well, like some forwarding headers.
+#
+# We'll have to pass these "sources" on to the other .depend_ file targets,
+# since otherwise they might be run before the generated sources are
+# generated.  _ALL_DEPENDS captures all files in SRCS that are not handled
+# by the mkdep calls, i.e. all sources that are not being used directly
+# for the .depend* file.
+#
+_ALL_DEPENDS=${__FLAGS_FILES:N*.[sS]:N*.c:N*.cc:N*.C:N*.cpp:N*.cpp:N*.cxx:N*.m}
 
 .for _FG in _ ${FLAGS_GROUPS}
-.depend_${_FG}: ${${_FG}_FLAGS_FILES}
+.depend${_FG:S/^/_/:N__}: ${${_FG}_FLAGS_FILES} ${_ALL_DEPENDS}
        -rm -f ${.TARGET}
        -> ${.TARGET}
 .if ${${_FG}_FLAGS_FILES:M*.[sS]} != ""
@@ -161,6 +173,9 @@ ${DEPENDFILE}: ${_DEPENDFILES}
            ${OBJCFLAGS:M-Wno-import*} \
            ${.ALLSRC:M*.m}
 .endif
+.if !empty(${_FG:M_}) && !empty(_DEPENDFILES)
+       cat ${_DEPENDFILES} >> ${.TARGET}
+.endif
 .endfor
 
 .if target(_EXTRADEPEND)
@@ -168,14 +183,14 @@ _EXTRADEPEND: .USE
 ${DEPENDFILE}: _EXTRADEPEND
 .endif
 
-.ORDER: ${DEPENDFILE} afterdepend
+.ORDER: ${_DEPENDFILES} ${DEPENDFILE} afterdepend
 .else
-depend: beforedepend afterdepend
+depend: beforedepend _dependincs afterdepend
 .endif
 .if !target(beforedepend)
 beforedepend:
 .else
-.ORDER: beforedepend ${DEPENDFILE}
+.ORDER: beforedepend ${_DEPENDFILES} ${DEPENDFILE}
 .ORDER: beforedepend afterdepend
 .endif
 .if !target(afterdepend)
@@ -218,3 +233,15 @@ checkdpadd:
        fi
 .endif
 .endif
+
+.if defined(INCS) && make(depend)
+
+_dependincs: ${INCS} ${SRCS}
+
+.ORDER: _dependincs depend
+
+.else
+
+_dependincs:
+
+.endif