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