aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Mk/bsd.port.mk88
1 files changed, 51 insertions, 37 deletions
diff --git a/Mk/bsd.port.mk b/Mk/bsd.port.mk
index ecb884caa453..f09d2dfdb142 100644
--- a/Mk/bsd.port.mk
+++ b/Mk/bsd.port.mk
@@ -4038,6 +4038,29 @@ DEV_WARNING+= "It looks like the ${d} depends line has an absolute port origin,
all-depends-list:
@${ALL-DEPENDS-LIST}
+_FLAVOR_RECURSIVE_SH= \
+ if [ -z "$${recursive_cmd}" ]; then \
+ ${ECHO_MSG} "_FLAVOR_RECURSIVE_SH requires recursive_cmd to be set to the recursive make target to run." >&2; \
+ ${FALSE}; \
+ fi; \
+ if [ "$${recursive_dirs-null}" = "null" ]; then \
+ ${ECHO_MSG} "_FLAVOR_RECURSIVE_SH requires recursive_dirs to be set to the directories to recurse." >&2; \
+ ${FALSE}; \
+ fi; \
+ for dir in $${recursive_dirs}; do \
+ case $${dir} in \
+ *@*) \
+ flavor=$${dir\#*@}; \
+ dir=$${dir%@*}; \
+ ;; \
+ esac; \
+ case $$dir in \
+ /*) ;; \
+ *) dir=${PORTSDIR}/$$dir ;; \
+ esac; \
+ (cd $$dir; ${SETENV} FLAVOR=$${flavor} ${MAKE} $${recursive_cmd}); \
+ done
+
# This script is shared among several dependency list variables. See file for
# usage.
DEPENDS-LIST= \
@@ -4051,6 +4074,7 @@ DEPENDS-LIST= \
${DEPENDS_SHOW_FLAVOR:D-f}
ALL-DEPENDS-LIST= ${DEPENDS-LIST} -r ${_UNIFIED_DEPENDS:Q}
+ALL-DEPENDS-FLAVORS-LIST= ${DEPENDS-LIST} -f -r ${_UNIFIED_DEPENDS:Q}
MISSING-DEPENDS-LIST= ${DEPENDS-LIST} -m ${_UNIFIED_DEPENDS:Q}
BUILD-DEPENDS-LIST= ${DEPENDS-LIST} "${PKG_DEPENDS} ${EXTRACT_DEPENDS} ${PATCH_DEPENDS} ${FETCH_DEPENDS} ${BUILD_DEPENDS} ${LIB_DEPENDS}"
RUN-DEPENDS-LIST= ${DEPENDS-LIST} "${LIB_DEPENDS} ${RUN_DEPENDS}"
@@ -4074,42 +4098,32 @@ limited-clean-depends:
.if !target(deinstall-depends)
deinstall-depends:
- @for dir in $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} deinstall); \
- done
+ @recursive_cmd="deinstall"; \
+ recursive_dirs="$$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif
.if !target(fetch-specials)
fetch-specials:
@${ECHO_MSG} "===> Fetching all distfiles required by ${PKGNAME} for building"
- @for dir in ${_DEPEND_SPECIALS}; do \
- case $${dir} in \
- *@*) \
- flavor=$${dir#*@}; \
- dir=$${dir%@*}; \
- ;; \
- esac; \
- case $$dir in \
- /*) ;; \
- *) dir=${PORTSDIR}/$$dir ;; \
- esac; \
- (cd $$dir; ${SETENV} FLAVOR=$${flavor} ${MAKE} fetch); \
- done
+ @recursive_cmd="fetch"; \
+ recursive_dirs="${_DEPEND_SPECIALS}"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif
.if !target(fetch-recursive)
fetch-recursive:
@${ECHO_MSG} "===> Fetching all distfiles for ${PKGNAME} and dependencies"
- @for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} fetch); \
- done
+ @recursive_cmd="fetch"; \
+ recursive_dirs="${.CURDIR} $$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif
.if !target(fetch-recursive-list)
fetch-recursive-list:
- @for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} fetch-list); \
- done
+ @recursive_cmd="fetch-list"; \
+ recursive_dirs="${.CURDIR} $$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif
# Used by fetch-required and fetch-required list, this script looks
@@ -4174,9 +4188,9 @@ fetch-required-list: fetch-list
.if !target(checksum-recursive)
checksum-recursive:
@${ECHO_MSG} "===> Fetching and checking checksums for ${PKGNAME} and dependencies"
- @for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} checksum); \
- done
+ @recursive_cmd="checksum"; \
+ recursive_dirs="${.CURDIR} $$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif
# Dependency lists: build and runtime. Print out directory names.
@@ -4313,9 +4327,9 @@ actual-package-depends:
# Build packages for port and dependencies
package-recursive: package
- @for dir in $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} package-noinstall); \
- done
+ @recursive_cmd="package-noinstall"; \
+ recursive_dirs="$$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
# Show missing dependencies
missing:
@@ -4983,9 +4997,9 @@ config:
.if !target(config-recursive)
config-recursive:
@${ECHO_MSG} "===> Setting user-specified options for ${PKGNAME} and dependencies";
- @for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} config-conditional); \
- done
+ @recursive_cmd="config-conditional"; \
+ recursive_dirs="${.CURDIR} $$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif # config-recursive
.if !target(config-conditional)
@@ -5039,9 +5053,9 @@ showconfig: check-config
.if !target(showconfig-recursive)
showconfig-recursive:
@${ECHO_MSG} "===> The following configuration options are available for ${PKGNAME} and dependencies";
- @for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} showconfig); \
- done
+ @recursive_cmd="showconfig"; \
+ recursive_dirs="${.CURDIR} $$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif # showconfig-recursive
.if !target(rmconfig)
@@ -5066,9 +5080,9 @@ rmconfig:
.if !target(rmconfig-recursive)
rmconfig-recursive:
@${ECHO_MSG} "===> Removing user-specified options for ${PKGNAME} and dependencies";
- @for dir in ${.CURDIR} $$(${ALL-DEPENDS-LIST}); do \
- (cd $$dir; ${MAKE} rmconfig); \
- done
+ @recursive_cmd="rmconfig"; \
+ recursive_dirs="${.CURDIR} $$(${ALL-DEPENDS-FLAVORS-LIST})"; \
+ ${_FLAVOR_RECURSIVE_SH}
.endif # rmconfig-recursive
.if !target(pretty-print-config)