aboutsummaryrefslogtreecommitdiff
path: root/share/mk/bsd.subdir.mk
diff options
context:
space:
mode:
authorBryan Drewery <bdrewery@FreeBSD.org>2015-12-02 01:50:22 +0000
committerBryan Drewery <bdrewery@FreeBSD.org>2015-12-02 01:50:22 +0000
commit03173d2ff0ccd53a36e09a70405febcd2e907e5d (patch)
tree52b65f59457e036dcf6ef99f2d44c7b861faef9d /share/mk/bsd.subdir.mk
parent70d3d39e785c7d558eaa4e2ccc8ab43117d3de8b (diff)
downloadsrc-03173d2ff0ccd53a36e09a70405febcd2e907e5d.tar.gz
src-03173d2ff0ccd53a36e09a70405febcd2e907e5d.zip
Notes
Diffstat (limited to 'share/mk/bsd.subdir.mk')
-rw-r--r--share/mk/bsd.subdir.mk70
1 files changed, 36 insertions, 34 deletions
diff --git a/share/mk/bsd.subdir.mk b/share/mk/bsd.subdir.mk
index ec2585f16412..12f2fa5477d9 100644
--- a/share/mk/bsd.subdir.mk
+++ b/share/mk/bsd.subdir.mk
@@ -36,10 +36,11 @@
.if !target(__<bsd.subdir.mk>__)
__<bsd.subdir.mk>__:
-ALL_SUBDIR_TARGETS= all all-man buildconfig checkdpadd clean cleandepend \
- cleandir cleanilinks cleanobj depend distribute \
- installconfig lint maninstall manlint obj objlink \
- realinstall regress tags \
+ALL_SUBDIR_TARGETS= all all-man buildconfig buildfiles buildincludes \
+ checkdpadd clean cleandepend cleandir cleanilinks \
+ cleanobj depend distribute files includes installconfig \
+ installfiles installincludes install lint maninstall \
+ manlint obj objlink regress tags \
${SUBDIR_TARGETS}
# Described above.
@@ -71,6 +72,27 @@ distribute: .MAKE
.endfor
.endif
+# Convenience targets to run 'build${target}' and 'install${target}' when
+# calling 'make ${target}'.
+.for __target in files includes
+.if !target(${__target})
+${__target}: build${__target} install${__target}
+.ORDER: build${__target} install${__target}
+.endif
+.endfor
+
+# Make 'install' supports a before and after target. Actual install
+# hooks are placed in 'realinstall'.
+.if !target(install)
+.for __stage in before real after
+.if !target(${__stage}install)
+${__stage}install:
+.endif
+.endfor
+install: beforeinstall realinstall afterinstall
+.ORDER: beforeinstall realinstall afterinstall
+.endif
+
# Subdir code shared among 'make <subdir>', 'make <target>' and SUBDIR_PARALLEL.
_SUBDIR_SH= \
if test -d ${.CURDIR}/$${dir}.${MACHINE_ARCH}; then \
@@ -82,7 +104,7 @@ _SUBDIR_SH= \
_SUBDIR: .USEBEFORE
.if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR)
- @${_+_}target=${.TARGET:S,realinstall,install,}; \
+ @${_+_}target=${.TARGET}; \
for dir in ${SUBDIR:N.WAIT}; do ( ${_SUBDIR_SH} ); done
.endif
@@ -101,6 +123,10 @@ SUBDIR:= ${SUBDIR:N.WAIT}
.else
_is_standalone_target= 0
.endif
+# Only recurse on directly-called targets. I.e., don't recurse on dependencies
+# such as 'install' becoming {before,real,after}install, just recurse
+# 'install'.
+.if make(${__target})
.if defined(SUBDIR_PARALLEL) || ${_is_standalone_target} == 1
__subdir_targets=
.for __dir in ${SUBDIR}
@@ -116,7 +142,7 @@ __deps+= ${__target}_subdir_${__dep}
.endif
${__target}_subdir_${__dir}: .PHONY .MAKE ${__deps}
.if !defined(NO_SUBDIR)
- @${_+_}target=${__target:realinstall=install}; \
+ @${_+_}target=${__target}; \
dir=${__dir}; \
${_SUBDIR_SH};
.endif
@@ -126,35 +152,11 @@ ${__target}: ${__subdir_targets}
.else
${__target}: _SUBDIR
.endif # SUBDIR_PARALLEL || _is_standalone_target
+.elif !target(${__target})
+${__target}:
+.endif # make(${__target})
.endfor # __target in ${ALL_SUBDIR_TARGETS}
-# This is to support 'make includes' calling 'make buildincludes' and
-# 'make installincludes' in the proper order, and to support these
-# targets as SUBDIR_TARGETS.
-.for __target in files includes
-.for __stage in build install
-${__stage}${__target}:
-.if make(${__stage}${__target})
-${__stage}${__target}: _SUBDIR
-.endif
-.endfor
-.if !target(${__target})
-${__target}: .MAKE
- ${_+_}cd ${.CURDIR}; ${MAKE} build${__target}; ${MAKE} install${__target}
-.endif
-.endfor
-
-.endif
-
-.if !target(install)
-.if !target(beforeinstall)
-beforeinstall:
-.endif
-.if !target(afterinstall)
-afterinstall:
-.endif
-install: beforeinstall realinstall afterinstall
-.ORDER: beforeinstall realinstall afterinstall
-.endif
+.endif # !target(_SUBDIR)
.endif