svn commit: r289606 - head/share/mk

Bryan Drewery bdrewery at FreeBSD.org
Mon Oct 19 23:34:37 UTC 2015


Author: bdrewery
Date: Mon Oct 19 23:34:35 2015
New Revision: 289606
URL: https://svnweb.freebsd.org/changeset/base/289606

Log:
  Replace all of the duplicated logic for recursing into a subdir with one
  implementation.  It is duplicated at run-time but is more easily
  maintainable now.
  
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  head/share/mk/bsd.subdir.mk

Modified: head/share/mk/bsd.subdir.mk
==============================================================================
--- head/share/mk/bsd.subdir.mk	Mon Oct 19 22:27:32 2015	(r289605)
+++ head/share/mk/bsd.subdir.mk	Mon Oct 19 23:34:35 2015	(r289606)
@@ -63,30 +63,25 @@ distribute: .MAKE
 .endfor
 .endif
 
+# Subdir code shared among 'make <subdir>', 'make <target>' and SUBDIR_PARALLEL.
+_SUBDIR_SH=	\
+		if test -d ${.CURDIR}/$${dir}.${MACHINE_ARCH}; then \
+			dir=$${dir}.${MACHINE_ARCH}; \
+		fi; \
+		${ECHODIR} "===> ${DIRPRFX}$${dir} ($${target})"; \
+		cd ${.CURDIR}/$${dir}; \
+		${MAKE} $${target} DIRPRFX=${DIRPRFX}$${dir}/
+
 _SUBDIR: .USE .MAKE
 .if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR)
-	@${_+_}for entry in ${SUBDIR:N.WAIT}; do \
-		if test -d ${.CURDIR}/$${entry}.${MACHINE_ARCH}; then \
-			${ECHODIR} "===> ${DIRPRFX}$${entry}.${MACHINE_ARCH} (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
-			edir=$${entry}.${MACHINE_ARCH}; \
-			cd ${.CURDIR}/$${edir}; \
-		else \
-			${ECHODIR} "===> ${DIRPRFX}$$entry (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
-			edir=$${entry}; \
-			cd ${.CURDIR}/$${edir}; \
-		fi; \
-		${MAKE} ${.TARGET:S,realinstall,install,:S,^_sub.,,} \
-		    DIRPRFX=${DIRPRFX}$$edir/; \
-	done
+	@${_+_}target=${.TARGET:S,realinstall,install,:S,^_sub.,,}; \
+	    for dir in ${SUBDIR:N.WAIT}; do ${_SUBDIR_SH}; done
 .endif
 
 ${SUBDIR:N.WAIT}: .PHONY .MAKE
-	${_+_}@if test -d ${.TARGET}.${MACHINE_ARCH}; then \
-		cd ${.CURDIR}/${.TARGET}.${MACHINE_ARCH}; \
-	else \
-		cd ${.CURDIR}/${.TARGET}; \
-	fi; \
-	${MAKE} all
+	${_+_}@target=all; \
+	    dir=${.TARGET}; \
+	    ${_SUBDIR_SH};
 
 # Work around parsing of .if nested in .for by putting .WAIT string into a var.
 __wait= .WAIT
@@ -104,17 +99,9 @@ __deps+= ${__target}_subdir_${__dep}
 .endfor
 ${__target}_subdir_${__dir}: .PHONY .MAKE ${__deps}
 .if !defined(NO_SUBDIR)
-	@${_+_}if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
-			${ECHODIR} "===> ${DIRPRFX}${__dir}.${MACHINE_ARCH} (${__target:realinstall=install})"; \
-			edir=${__dir}.${MACHINE_ARCH}; \
-			cd ${.CURDIR}/$${edir}; \
-		else \
-			${ECHODIR} "===> ${DIRPRFX}${__dir} (${__target:realinstall=install})"; \
-			edir=${__dir}; \
-			cd ${.CURDIR}/$${edir}; \
-		fi; \
-		${MAKE} ${__target:realinstall=install} \
-		    DIRPRFX=${DIRPRFX}$$edir/
+	@${_+_}target=${__target:realinstall=install}; \
+	    dir=${__dir}; \
+	    ${_SUBDIR_SH};
 .endif
 .endif
 .endfor


More information about the svn-src-all mailing list