aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.inc132
-rw-r--r--share/mk/bsd.subdir.mk70
2 files changed, 49 insertions, 53 deletions
diff --git a/Makefile.inc1 b/Makefile.inc1
index 3e2894cf20d3..9d2253c04b87 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -643,12 +643,9 @@ _includes:
# Special handling for SUBDIR_OVERRIDE in buildworld as they most likely need
# headers from default SUBDIR. Do SUBDIR_OVERRIDE includes last.
${_+_}cd ${.CURDIR}; ${WMAKE} SUBDIR_OVERRIDE= SHARED=symlinks \
- buildincludes
- ${_+_}cd ${.CURDIR}; ${WMAKE} SUBDIR_OVERRIDE= SHARED=symlinks \
- installincludes
+ includes
.if !empty(SUBDIR_OVERRIDE) && make(buildworld)
- ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks buildincludes
- ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks installincludes
+ ${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks includes
.endif
_libraries:
@echo
@@ -669,7 +666,7 @@ everything:
@echo "--------------------------------------------------------------"
@echo ">>> stage 4.4: building everything"
@echo "--------------------------------------------------------------"
- ${_+_}cd ${.CURDIR}; ${WMAKE} par-all
+ ${_+_}cd ${.CURDIR}; _PARALLEL_SUBUDIR_OK=1 ${WMAKE} all
.if defined(LIB32TMP)
build32: .PHONY
@echo
@@ -2010,16 +2007,15 @@ _startup_libs: ${_startup_libs:S/$/__L/}
_prebuild_libs: ${_prebuild_libs:S/$/__L/}
_generic_libs: ${_generic_libs:S/$/__L/}
-# Enable SUBDIR_PARALLEL when not calling 'make all', unless called as
-# 'par-all'. This is because it is unlikely that running 'make all' from
-# the top-level, especially with a SUBDIR_OVERRIDE or LOCAL_DIRS set,
-# will have a reliable build if SUBDIRs are built in parallel. This is
-# safe for the world stage of buildworld though since it has already
-# built libraries in a proper order and installed includes into WORLDTMP.
-# Special handling is done for SUBDIR ordering for 'install*' to avoid
-# trashing a system if it crashes mid-install.
-par-all: all .PHONY
-.if !make(all)
+# Enable SUBDIR_PARALLEL when not calling 'make all', unless called from
+# 'everything' with _PARALLEL_SUBUDIR_OK set. This is because it is unlikely
+# that running 'make all' from the top-level, especially with a SUBDIR_OVERRIDE
+# or LOCAL_DIRS set, will have a reliable build if SUBDIRs are built in
+# parallel. This is safe for the world stage of buildworld though since it has
+# already built libraries in a proper order and installed includes into
+# WORLDTMP. Special handling is done for SUBDIR ordering for 'install*' to
+# avoid trashing a system if it crashes mid-install.
+.if !make(all) || defined(_PARALLEL_SUBUDIR_OK)
SUBDIR_PARALLEL=
.endif
@@ -2359,9 +2355,7 @@ _xi-cross-tools: .PHONY
.endfor
_xi-includes: .PHONY
- ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 buildincludes \
- DESTDIR=${XDDESTDIR}
- ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 installincludes \
+ ${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 includes \
DESTDIR=${XDDESTDIR}
_xi-libraries: .PHONY
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