socsvn commit: r236669 - soc2012/scher/par_ports/head/Mk
scher at FreeBSD.org
scher at FreeBSD.org
Tue May 29 16:05:21 UTC 2012
Author: scher
Date: Tue May 29 16:05:18 2012
New Revision: 236669
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=236669
Log:
[fixed] Trigger name changed to suit variable naming _parv_WANT_PARALLEL_BUILD
kill signal changed to USR1
make utility exit with 158 status on lock
[new_feature] ${.CURDIR} locking behaviour for dependency build
${PKG_DBDIR} locking phases for XXX-depends and lib-depends targets
Blocking Parallel build/install support for port's dependencies
in XXX-depends and lib-depends targets
Submitted by: Alexander Pronin
Modified:
soc2012/scher/par_ports/head/Mk/bsd.parallel.mk
soc2012/scher/par_ports/head/Mk/bsd.port.mk
Modified: soc2012/scher/par_ports/head/Mk/bsd.parallel.mk
==============================================================================
--- soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Tue May 29 15:56:30 2012 (r236668)
+++ soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Tue May 29 16:05:18 2012 (r236669)
@@ -5,6 +5,11 @@
#
# Please view me with 4 column tabs!
+#
+# _parv_WANT_PARALLEL_BUILD
+# _parv_ATTEMPTS_TO_LOCK
+#
+#
_dparv_=
@@ -31,7 +36,7 @@
_parv_DEFAULT_TARGETS= all check-sanity fetch checksum extract patch configure build install
_parv_IS_DEFAULT_TARGET= 0
-# e.g. make "WANT_PARALLEL_BUILD="
+# e.g. make -D_parv_WANT_PARALLEL_BUILD
# All target will be evaluated. It is in default sequence
#
.if !${.TARGETS}
@@ -50,7 +55,7 @@
#####################################################
# Commands
_parv_KILL= /bin/kill
-_parv_KILL_FLAGS= --
+_parv_KILL_SIGNAL= USR1
_parv_PKILL= /bin/pkill
_parv_PKILL_FLAGS= -P
@@ -72,6 +77,8 @@
_parv_ON_LOCK_EXIT_STATUS= 2
_parv_LOCKF_EX_TEMPFAIL= 75
+_parv_MAKE_LOCK_EXIT_STATUS= 158
+
# Senquence of commands to lock a directory using ${_parv_LOCK_FILE}.
# During evaluation of the following commands lockf(1) is holding lock on ${_parv_LOCK_FILE} file.
# Hence NO other process is able to evaluate any commands using lockf(1)
Modified: soc2012/scher/par_ports/head/Mk/bsd.port.mk
==============================================================================
--- soc2012/scher/par_ports/head/Mk/bsd.port.mk Tue May 29 15:56:30 2012 (r236668)
+++ soc2012/scher/par_ports/head/Mk/bsd.port.mk Tue May 29 16:05:18 2012 (r236669)
@@ -1129,8 +1129,8 @@
.include "${PORTSDIR}/Mk/bsd.commands.mk"
############### PAR_PORTS SPECIFIC COMMENT LINE ###############
-# _parv_WANT_PARALLEL_BUILD - define this variable if port want to enable
-# parallel build/install features
+# _parv_WANT_PARALLEL_BUILD - assign this variable any value if port want to enable
+# parallel build/install features.
#
.if defined(_parv_WANT_PARALLEL_BUILD)
@@ -1531,7 +1531,19 @@
.BEGIN:
. if defined(_parv_WANT_PARALLEL_BUILD)
. if ${_parv_IS_DEFAULT_TARGET}
+. if defined(INSTALLS_DEPENDS)
+ @( ${_parv_.CURDIR_LOCK_LOOP} ) || { \
+ status=$$?; \
+ if [ $${status} -eq ${_parv_ON_LOCK_EXIT_STATUS} ]; then \
+ ${_parv_KILL} -${_parv_KILL_SIGNAL} ${.MAKE.PID} && \
+ ${_parv_PKILL} ${_parv_PKILL_FLAGS} $$$$; \
+ else \
+ exit $${status}; \
+ fi; \
+ }
+. else
@attempts=-1; ${_parv_.CURDIR_LOCK_LOOP}
+. endif
. endif
. endif
# You can force skipping these test by defining IGNORE_PATH_CHECKS
@@ -5022,6 +5034,11 @@
_DEPEND_ALWAYS= 0
.endif
+############### PAR_PORTS SPECIFIC COMMENT LINE ###############
+# _INSTALL_DEPENDS script is surrounded by while loop.
+# When the port is installed it is necessary to break most inner while loop.
+############### END OF PAR_PORTS SPECIFIC COMMENT LINE ###############
+
_INSTALL_DEPENDS= \
if [ X${USE_PACKAGE_DEPENDS} != "X" ]; then \
subpkgfile=`(cd $$dir; ${MAKE} $$depends_args -V PKGFILE)`; \
@@ -5038,10 +5055,24 @@
${PKG_ADD} $${subpkgfile}; \
fi; \
else \
- (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
+ (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) && status=$$? || status=$$?; \
fi; \
else \
- (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
+ (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args; ) && status=$$? || status=$$?; \
+ fi; \
+ if [ ! ${_parv_WANT_PARALLEL_BUILD} ] && [ $${status} != 0 ]; then \
+ exit $${status}; \
+ fi; \
+ if [ ${_parv_WANT_PARALLEL_BUILD} ]; then \
+ if [ $${status} -eq 0 ]; then \
+ _parv_next_dep=1; \
+ elif [ $${status} -eq ${_parv_MAKE_LOCK_EXIT_STATUS} ]; then \
+ ${ECHO_CMD} $${prog} may be installing now.; \
+ sleep 2; \
+ continue; \
+ else \
+ exit $${status}; \
+ fi; \
fi; \
${ECHO_MSG} "===> Returning to build of ${PKGNAME}";
@@ -5071,6 +5102,11 @@
target="${DEPENDS_TARGET}"; \
depends_args="${DEPENDS_ARGS}"; \
fi; \
+ _parv_next_dep=0; \
+ while [ $${_parv_next_dep} -eq 0 ]; do \
+ if [ ${_parv_WANT_PARALLEL_BUILD} ]; then \
+ ( attempts=-1; ${_parv_PKG_DBDIR_LOCK_LOOP} ); \
+ fi; \
if ${EXPR} "$$prog" : \\/ >/dev/null; then \
if [ -e "$$prog" ]; then \
if [ "$$prog" = "${NONEXISTENT}" ]; then \
@@ -5130,6 +5166,22 @@
notfound=1; \
fi; \
fi; \
+ if [ ${_parv_WANT_PARALLEL_BUILD} ] && [ $${notfound} -eq 1 ]; then \
+ ( ${_parv_CHECK_LOCK} ) || { \
+ status=$$?; \
+ if [ $${status} -eq ${_parv_ON_LOCK_EXIT_STATUS} ]; then \
+ ( ${_parv_PKG_DBDIR_DO_UNLOCK} ); \
+ ${ECHO_CMD} $${prog} may be installing now.; \
+ sleep 2; \
+ continue; \
+ else \
+ exit $${status}; \
+ fi; \
+ }; \
+ fi; \
+ if [ ${_parv_WANT_PARALLEL_BUILD} ]; then \
+ ( ${_parv_PKG_DBDIR_DO_UNLOCK} ); \
+ fi; \
if [ $$notfound != 0 ]; then \
${ECHO_MSG} "===> Verifying $$target for $$prog in $$dir"; \
if [ ! -d "$$dir" ]; then \
@@ -5138,6 +5190,9 @@
${_INSTALL_DEPENDS} \
fi; \
fi; \
+ if [ $${notfound} -eq 0 ]; then _parv_next_dep=1; fi; \
+ if [ ! ${_parv_WANT_PARALLEL_BUILD} ]; then _parv_next_dep=1; fi; \
+ done; \
done
.endif
.else
@@ -5159,6 +5214,11 @@
dir=$${dir%%:*}; \
fi; \
${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $$lib"; \
+ _parv_next_dep=0; \
+ while [ $${_parv_next_dep} -eq 0 ]; do \
+ if [ ${_parv_WANT_PARALLEL_BUILD} ]; then \
+ ( attempts=-1; ${_parv_PKG_DBDIR_LOCK_LOOP} ); \
+ fi; \
if ${LDCONFIG} ${_LDCONFIG_FLAGS} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
${ECHO_MSG} " - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
@@ -5171,6 +5231,22 @@
${ECHO_MSG} " - not found"; \
notfound=1; \
fi; \
+ if [ ${_parv_WANT_PARALLEL_BUILD} ] && [ $${notfound} -eq 1 ]; then \
+ ( ${_parv_CHECK_LOCK} ) || { \
+ status=$$?; \
+ if [ $${status} -eq ${_parv_ON_LOCK_EXIT_STATUS} ]; then \
+ ( ${_parv_PKG_DBDIR_DO_UNLOCK} ); \
+ ${ECHO_CMD} $${prog} may be installing now.; \
+ sleep 2; \
+ continue; \
+ else \
+ exit $${status}; \
+ fi; \
+ }; \
+ fi; \
+ if [ ${_parv_WANT_PARALLEL_BUILD} ]; then \
+ ( ${_parv_PKG_DBDIR_DO_UNLOCK} ); \
+ fi; \
if [ $$notfound != 0 ]; then \
${ECHO_MSG} "===> Verifying $$target for $$lib in $$dir"; \
if [ ! -d "$$dir" ]; then \
@@ -5183,6 +5259,9 @@
fi; \
fi; \
fi; \
+ if [ $${notfound} -eq 0 ]; then _parv_next_dep=1; fi; \
+ if [ ! ${_parv_WANT_PARALLEL_BUILD} ]; then _parv_next_dep=1; fi; \
+ done; \
done
.endif
@@ -5921,13 +6000,7 @@
.if !defined(NO_PKG_REGISTER)
############### PAR_PORTS SPECIFIC COMMENT LINE ###############
.if defined(_parv_WANT_PARALLEL_BUILD)
- @( attempts=-1; ${_parv_PKG_DBDIR_LOCK_LOOP} ) || { \
- status=$$?; \
- ${_dparv_START_OUTPUT}; \
- ${ECHO_CMD} Unable to lock ${PKG_DBDIR}. Exit status $${status}; \
- ${_dparv_END_OUTPUT}; \
- exit 1; \
- }
+ @( attempts=-1; ${_parv_PKG_DBDIR_LOCK_LOOP} )
.endif
############### END OF PAR_PORTS SPECIFIC COMMENT LINE ###############
@if [ ! -d ${PKG_DBDIR} ]; then ${RM} -f ${PKG_DBDIR}; ${MKDIR} ${PKG_DBDIR}; fi
@@ -5977,13 +6050,7 @@
fi
############### PAR_PORTS SPECIFIC COMMENT LINE ###############
.if defined(_parv_WANT_PARALLEL_BUILD)
- @( ${_parv_PKG_DBDIR_DO_UNLOCK} ) || { \
- status=$$?; \
- ${_dparv_START_OUTPUT}; \
- ${ECHO_CMD} Unable to unlock ${PKG_DBDIR}. Exit status $${status}; \
- ${_dparv_END_OUTPUT}; \
- exit 1; \
- }
+ @( ${_parv_PKG_DBDIR_DO_UNLOCK} )
.endif
############### END OF PAR_PORTS SPECIFIC COMMENT LINE ###############
.else
More information about the svn-soc-all
mailing list