socsvn commit: r238322 - soc2012/scher/par_ports/head/Mk

scher at FreeBSD.org scher at FreeBSD.org
Tue Jun 26 07:09:32 UTC 2012


Author: scher
Date: Tue Jun 26 07:09:29 2012
New Revision: 238322
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238322

Log:
  [fixed] ${_TERMINATE_PROCESS_TREE} and ${_PROCESS_ACTIVE_BUILDS} scripts
  	are moved to bsd.parallel.mk since they are not used by non
  	parallel builds.
  ${_TERMINATE_PROCESS_TREE} listens either to EXIT signal.
  

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 Jun 26 06:02:43 2012	(r238321)
+++ soc2012/scher/par_ports/head/Mk/bsd.parallel.mk	Tue Jun 26 07:09:29 2012	(r238322)
@@ -363,12 +363,127 @@
 # End of Locking variables and tools section
 #####################################################
 
-locking-config-recursive: locking-config-message lock-port-dbdir config-conditional config-recursive unlock-port-dbdir
+#
+# _PROCESS_ACTIVE_BUILDS	- this script contains all magic, related to
+#							  processing of background dependecy builds.
+#
+# $${builds_num}			- current number of spawned background dependecy
+#							  builds. If $${builds_num} < ${_parv_PARALLEL_BUILDS_NUMBER}
+#							  then another background dependency build will be
+#							  spawned, if there is any dependency to be spawned.
+#							  Otherwise "sleep ${CHECK_ACTIVE_TIMEOUT}" will be called.
+# $${active_builds} 		- a list of "pid:path:dir[:target]" or "pid:lib:dir[:target]"
+# 							  tuples of all currently being processed ports,
+#							  spawned by this make process.
+#
+_PROCESS_ACTIVE_BUILDS= \
+	echo "----   dependency output  ----- : --- ENTER _PROCESS_ACTIVE_BUILDS SECTION "; \
+	while true; do \
+		builds_num=$$( ${ECHO_CMD} $${active_builds} | wc -w ); \
+		if [ $${builds_num} -lt ${_parv_PARALLEL_BUILDS_NUMBER} ] && [ $${\#depends} -ne 0 ]; then \
+			echo "----   dependency output  ----- : WE CAN START ANOTHER PAR BUILD "; \
+			break; \
+		fi; \
+		if [ $${builds_num} -eq 0 ] && [ $${\#depends} -eq 0 ]; then \
+			${ECHO_MSG} "===>   Returning to build of ${PKGNAME}"; \
+			break; \
+		fi; \
+		for build in $$( ${ECHO_CMD} "$${active_builds}" ); do \
+			pid=$${build%%:*}; \
+			dep=$${build\#*:}; \
+			ps -p $${pid} > /dev/null || { \
+				wait $${pid} && status=$$? || status=$$?; \
+				if [ $${status} -eq 0 ]; then \
+					echo "----   dependency output  ----- : SOME DEP IS INSTALLED ($${dep}) "; \
+					echo "----   dependency output  ----- : ACTIVE BUILDS WAS _$${active_builds}_ "; \
+					active_builds="$${active_builds%%$${build}*} $${active_builds\#\#*$${build}}"; \
+					active_builds=$$( echo "$${active_builds}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
+					builds_num=$$(( $${builds_num} - 1 )); \
+					echo "----   dependency output  ----- : ACTIVE BUILDS NOW _$${active_builds}_ "; \
+					if [ ${.TARGET} = "lib-depends" ]; then \
+						lib=$${dep%%:*}; \
+						pattern="`${ECHO_CMD} $$lib | ${SED} -E -e 's/\./\\\\./g' -e 's/(\\\\)?\+/\\\\+/g'`"; \
+						if ! ${LDCONFIG} ${_LDCONFIG_FLAGS} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
+							${ECHO_MSG} "Error: shared library \"$$lib\" does not exist"; \
+							${FALSE}; \
+						fi; \
+					fi; \
+				elif [ $${status} -eq ${_parv_MAKE_LOCK_EXIT_STATUS} ]; then \
+					echo "----   dependency output  ----- : SOME DEP IS LOCKED ($${dep}) "; \
+					echo "----   dependency output  ----- : ACTIVE BUILDS WAS _$${active_builds}_ "; \
+					active_builds="$${active_builds%%$${build}*} $${active_builds\#\#*$${build}}"; \
+					active_builds=$$( echo "$${active_builds}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
+					builds_num=$$(( $${builds_num} - 1 )); \
+					echo "----   dependency output  ----- : ACTIVE BUILDS NOW _$${active_builds}_ "; \
+					echo "----   dependency output  ----- : ADD IT BACK DO DEPENDS LIST "; \
+					echo "----   dependency output  ----- : DEPENDS WAS _$${depends}_ "; \
+					depends="$${depends} $${dep}"; \
+					depends=$$( echo "$${depends}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
+					echo "----   dependency output  ----- : DEPENDS NOW _$${depends}_ "; \
+				else \
+					${ECHO_CMD} "Errors occured while building a dependency (PID - $${pid}): $${dep}"; \
+					${ECHO_CMD} "Checkout it's log"; \
+					${ECHO_CMD} "Terminating..."; \
+					${_TERMINATE_PROCESS_TREE}; \
+				fi; \
+			}; \
+		done; \
+		if { [ $${builds_num} -eq ${_parv_PARALLEL_BUILDS_NUMBER} ] || \
+			( [ $${builds_num} -gt 0 ] && [ $${\#depends} -eq 0 ] ); }; then \
+			if [ ${_parv_WANT_PARALLEL_BUILD} ]; then \
+				echo "----   dependency output  ----- : CAN'T SPAWN MORE DEPS! SLEEP... "; \
+			fi; \
+			sleep ${CHECK_ACTIVE_TIMEOUT}; \
+		fi; \
+	done; \
+	echo "----   dependency output  ----- : --- LEAVE _PROCESS_ACTIVE_BUILDS SECTION "
+
+#
+# _TERMINATE_PROCESS_TREE	- this script contains all magic, related to
+#							  terminating of the whole process tree, starting
+#							  from ${.MAKE.PID}.
+#							  This script implements Breadth-first traversal of
+#							  the process tree. It prevents processes of the
+#							  current level from evaluation of any commands using
+#							  STOP signal. Then it determines children of
+#							  processes of the current level of process tree
+#							  and stops them and so forth...
+#							  It is necessary to stop processes to avoid new
+#							  untracked pids. Finally, this script kills $${pids_to_kill}
+#							  
+# $${pids_to_kill}			- all pids of the process tree, starting from ${.MAKE.PID}
+# 
+_TERMINATE_PROCESS_TREE= \
+	[ $$? -eq 0 ] && exit 0; \
+	${ECHO_CMD} Terminating process tree strating from ${.MAKE.PID}; \
+	pids_to_kill=${.MAKE.PID}; \
+	/bin/kill -STOP ${.MAKE.PID} 2> /dev/null || ${DO_NADA}; \
+	ppids=$$( ps -xao pid,ppid | awk "{ if (\$$2==${.MAKE.PID}) {print \$$1} }" ); \
+	pids_to_kill="$${pids_to_kill} $${ppids}"; \
+	/bin/kill -STOP "$${ppids%%$$$$*} $${ppids\#\#*$$$$}" 2> /dev/null || ${DO_NADA}; \
+	while true; do \
+		tmp_ppids=$$(${ECHO_CMD} $${ppids}); \
+		ppids=""; \
+		for ppid in $${tmp_ppids}; do \
+			children=$$( ps -xao pid,ppid | awk "{ if (\$$2==$${ppid}) {print \$$1} }" ); \
+			if [ $${\#children} -eq 0 ]; then continue; fi; \
+			pids_to_kill="$${pids_to_kill} $${children}"; \
+			ppids="$${ppids} $${children}"; \
+			/bin/kill -STOP $${children} 2> /dev/null || ${DO_NADA}; \
+		done; \
+		if [ $${\#ppids} -eq 0 ]; then break; fi; \
+	done; \
+	${ECHO_CMD} PIDs to kill: $${pids_to_kill}; \
+	/bin/kill -KILL $${pids_to_kill} 2> /dev/null || ${DO_NADA}
+
+#####################################################
+
+locking-config-recursive: locking-config-message lock-port-dbdir config-recursive unlock-port-dbdir
 
 locking-config-message:
 	@${ECHO_MSG} "===> Setting user-specified options for ${PKGNAME} and dependencies";
 
-config-recursive:
+config-recursive: config-conditional
 	@for dir in $$(${MAKE} run-depends-list build-depends-list | uniq); do \
 		while true; do \
 			( cd $$dir; ${MAKE} locking-config-recursive ) || { \

Modified: soc2012/scher/par_ports/head/Mk/bsd.port.mk
==============================================================================
--- soc2012/scher/par_ports/head/Mk/bsd.port.mk	Tue Jun 26 06:02:43 2012	(r238321)
+++ soc2012/scher/par_ports/head/Mk/bsd.port.mk	Tue Jun 26 07:09:29 2012	(r238322)
@@ -1133,12 +1133,6 @@
 #				  It does not matter what value is assigned.
 #				  Example: _parv_WANT_PARALLEL_BUILD=yes
 #
-# CHECK_ACTIVE_TIMEOUT
-#				- timeout in seconds before next check of active builds in case
-#				  if port is prohibit to spawn another background process.
-#				  Consider that this variable is also used in non-parallel build.
-#				  Default: 2
-#
 ############### ENDF OF PAR_PORTS SPECIFIC COMMENT LINE  ###############
 #
 # End of the list of all variables that need to be defined in a port.
@@ -1160,16 +1154,11 @@
 
 ############### PAR_PORTS SPECIFIC COMMENT LINE ############### 
 
-CHECK_ACTIVE_TIMEOUT?= 2
-
 .if defined(_parv_WANT_PARALLEL_BUILD)
 .include "${PORTSDIR}/Mk/bsd.parallel.mk"
 .endif
 
-# non-parallel build
-.if !defined(_parv_WANT_PARALLEL_BUILD)
-_parv_PARALLEL_BUILDS_NUMBER= 1
-.endif
+_PROCESS_ACTIVE_BUILDS?= ${DO_NADA}
 
 .if !target(lock-port-dbdir)
 lock-port-dbdir:
@@ -4359,7 +4348,7 @@
 				check-categories check-makevars check-desktop-entries \
 				check-depends check-active-build-conflicts identify-install-conflicts check-deprecated \
 				check-vulnerable check-license check-config buildanyway-message \
-				options-message locking-config-recursive
+				options-message locking-config-recursive seal
 
 _PKG_DEP=		check-sanity locking-config-recursive
 _PKG_SEQ=		pkg-depends
@@ -5104,128 +5093,6 @@
 			fi; \
 		fi; \
 
-############### PAR_PORTS SPECIFIC COMMENT LINE ###############
-#
-# _PROCESS_ACTIVE_BUILDS	- this script contains all magic, related to
-#							  processing of background dependecy builds.
-#
-# $${builds_num}			- current number of spawned background dependecy
-#							  builds. If $${builds_num} < ${_parv_PARALLEL_BUILDS_NUMBER}
-#							  then another background dependency build will be
-#							  spawned, if there is any dependency to be spawned.
-#							  Otherwise "sleep ${CHECK_ACTIVE_TIMEOUT}" will be called.
-# $${active_builds} 		- a list of "pid:path:dir[:target]" or "pid:lib:dir[:target]"
-# 							  tuples of all currently being processed ports,
-#							  spawned by this make process.
-#
-############### END OF PAR_PORTS SPECIFIC COMMENT LINE  ###############
-
-.if defined(_parv_WANT_PARALLEL_BUILD)
-_PROCESS_ACTIVE_BUILDS= \
-	echo "----   dependency output  ----- : --- ENTER _PROCESS_ACTIVE_BUILDS SECTION "; \
-	while true; do \
-		builds_num=$$( ${ECHO_CMD} $${active_builds} | wc -w ); \
-		if [ $${builds_num} -lt ${_parv_PARALLEL_BUILDS_NUMBER} ] && [ $${\#depends} -ne 0 ]; then \
-			echo "----   dependency output  ----- : WE CAN START ANOTHER PAR BUILD "; \
-			break; \
-		fi; \
-		if [ $${builds_num} -eq 0 ] && [ $${\#depends} -eq 0 ]; then \
-			${ECHO_MSG} "===>   Returning to build of ${PKGNAME}"; \
-			break; \
-		fi; \
-		for build in $$( ${ECHO_CMD} "$${active_builds}" ); do \
-			pid=$${build%%:*}; \
-			dep=$${build\#*:}; \
-			ps -p $${pid} > /dev/null || { \
-				wait $${pid} && status=$$? || status=$$?; \
-				if [ $${status} -eq 0 ]; then \
-					echo "----   dependency output  ----- : SOME DEP IS INSTALLED ($${dep}) "; \
-					echo "----   dependency output  ----- : ACTIVE BUILDS WAS _$${active_builds}_ "; \
-					active_builds="$${active_builds%%$${build}*} $${active_builds\#\#*$${build}}"; \
-					active_builds=$$( echo "$${active_builds}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
-					builds_num=$$(( $${builds_num} - 1 )); \
-					echo "----   dependency output  ----- : ACTIVE BUILDS NOW _$${active_builds}_ "; \
-					if [ ${.TARGET} = "lib-depends" ]; then \
-						lib=$${dep%%:*}; \
-						pattern="`${ECHO_CMD} $$lib | ${SED} -E -e 's/\./\\\\./g' -e 's/(\\\\)?\+/\\\\+/g'`"; \
-						if ! ${LDCONFIG} ${_LDCONFIG_FLAGS} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
-							${ECHO_MSG} "Error: shared library \"$$lib\" does not exist"; \
-							${FALSE}; \
-						fi; \
-					fi; \
-				elif [ $${status} -eq ${_parv_MAKE_LOCK_EXIT_STATUS} ]; then \
-					echo "----   dependency output  ----- : SOME DEP IS LOCKED ($${dep}) "; \
-					echo "----   dependency output  ----- : ACTIVE BUILDS WAS _$${active_builds}_ "; \
-					active_builds="$${active_builds%%$${build}*} $${active_builds\#\#*$${build}}"; \
-					active_builds=$$( echo "$${active_builds}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
-					builds_num=$$(( $${builds_num} - 1 )); \
-					echo "----   dependency output  ----- : ACTIVE BUILDS NOW _$${active_builds}_ "; \
-					echo "----   dependency output  ----- : ADD IT BACK DO DEPENDS LIST "; \
-					echo "----   dependency output  ----- : DEPENDS WAS _$${depends}_ "; \
-					depends="$${depends} $${dep}"; \
-					depends=$$( echo "$${depends}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
-					echo "----   dependency output  ----- : DEPENDS NOW _$${depends}_ "; \
-				else \
-					${ECHO_CMD} "Errors occured while building a dependency (PID - $${pid}): $${dep}"; \
-					${ECHO_CMD} "Checkout it's log"; \
-					${ECHO_CMD} "Terminating..."; \
-					${_TERMINATE_PROCESS_TREE}; \
-				fi; \
-			}; \
-		done; \
-		if { [ $${builds_num} -eq ${_parv_PARALLEL_BUILDS_NUMBER} ] || \
-			( [ $${builds_num} -gt 0 ] && [ $${\#depends} -eq 0 ] ); }; then \
-			if [ ${_parv_WANT_PARALLEL_BUILD} ]; then \
-				echo "----   dependency output  ----- : CAN'T SPAWN MORE DEPS! SLEEP... "; \
-			fi; \
-			sleep ${CHECK_ACTIVE_TIMEOUT}; \
-		fi; \
-	done; \
-	echo "----   dependency output  ----- : --- LEAVE _PROCESS_ACTIVE_BUILDS SECTION "
-.else
-_PROCESS_ACTIVE_BUILDS= ${DO_NADA}
-.endif
-
-############### PAR_PORTS SPECIFIC COMMENT LINE ###############
-#
-# _TERMINATE_PROCESS_TREE	- this script contains all magic, related to
-#							  terminating of the whole process tree, starting
-#							  from ${.MAKE.PID}.
-#							  This script implements Breadth-first traversal of
-#							  the process tree. It prevents processes of the
-#							  current level from evaluation of any commands using
-#							  STOP signal. Then it determines children of
-#							  processes of the current level of process tree
-#							  and stops them and so forth...
-#							  It is necessary to stop processes to avoid new
-#							  untracked pids. Finally, this script kills $${pids_to_kill}
-#							  
-# $${pids_to_kill}			- all pids of the process tree, starting from ${.MAKE.PID}
-# 
-############### END OF PAR_PORTS SPECIFIC COMMENT LINE  ###############
-
-_TERMINATE_PROCESS_TREE= \
-	${ECHO_CMD} Terminating process tree strating from ${.MAKE.PID}; \
-	pids_to_kill=${.MAKE.PID}; \
-	/bin/kill -STOP ${.MAKE.PID} 2> /dev/null || ${DO_NADA}; \
-	ppids=$$( ps -xao pid,ppid | awk "{ if (\$$2==${.MAKE.PID}) {print \$$1} }" ); \
-	pids_to_kill="$${pids_to_kill} $${ppids}"; \
-	/bin/kill -STOP "$${ppids%%$$$$*} $${ppids\#\#*$$$$}" 2> /dev/null || ${DO_NADA}; \
-	while true; do \
-		tmp_ppids=$$(${ECHO_CMD} $${ppids}); \
-		ppids=""; \
-		for ppid in $${tmp_ppids}; do \
-			children=$$( ps -xao pid,ppid | awk "{ if (\$$2==$${ppid}) {print \$$1} }" ); \
-			if [ $${\#children} -eq 0 ]; then continue; fi; \
-			pids_to_kill="$${pids_to_kill} $${children}"; \
-			ppids="$${ppids} $${children}"; \
-			/bin/kill -STOP $${children} 2> /dev/null || ${DO_NADA}; \
-		done; \
-		if [ $${\#ppids} -eq 0 ]; then break; fi; \
-	done; \
-	${ECHO_CMD} PIDs to kill: $${pids_to_kill}; \
-	/bin/kill -KILL $${pids_to_kill} 2> /dev/null || ${DO_NADA}
-
 ############### PAR_PORTS SPECIFIC COMMENT LINE ############### 
 #
 # $${notfound} codes : 0 - dep found
@@ -5239,7 +5106,7 @@
 .if defined(${deptype}_DEPENDS)
 .if !defined(NO_DEPENDS)
 	@if [ ! ${INSTALLS_DEPENDS} ]; then \
-		trap '${_TERMINATE_PROCESS_TREE}' INT TERM; \
+		trap '${_TERMINATE_PROCESS_TREE}' EXIT INT TERM; \
 	fi; \
 	depends=`${ECHO_CMD} "${${deptype}_DEPENDS}"`; \
 	depends=$$( echo "$${depends}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
@@ -5319,7 +5186,7 @@
 					pkg_info=`${PKG_INFO} -E "$$inverse_dep" || ${TRUE}`; \
 					if [ "$$pkg_info" != "" ]; then \
 						${ECHO_MSG} "===>   Found $$pkg_info, but you need to upgrade to $$prog."; \
-						${_TERMINATE_PROCESS_TREE}; \
+						exit 1; \
 					fi; \
 				fi; \
 			elif ${WHICH} "$$prog" > /dev/null 2>&1 ; then \
@@ -5391,7 +5258,7 @@
 lib-depends:
 .if defined(LIB_DEPENDS) && !defined(NO_DEPENDS)
 	@if [ ! ${INSTALLS_DEPENDS} ]; then \
-		trap '${_TERMINATE_PROCESS_TREE}' INT TERM; \
+		trap '${_TERMINATE_PROCESS_TREE}' EXIT INT TERM; \
 	fi; \
 	depends=`${ECHO_CMD} "${LIB_DEPENDS}"`; \
 	depends=$$( echo "$${depends}" | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$$//' ); \
@@ -5451,6 +5318,11 @@
 				${ECHO_MSG} "     => No directory for $$lib.  Skipping.."; \
 			else \
 				${_INSTALL_DEPENDS} \
+				if [ !${_parv_WANT_PARALLEL_BUILD} ]; then \
+					if ! ${LDCONFIG} ${_LDCONFIG_FLAGS} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
+					${ECHO_MSG} "Error: shared library \"$$lib\" does not exist"; \
+					${FALSE}; \
+				fi; \
 				if [ $${spawned} ]; then \
 					echo "----   dependency output  ----- : SPAWNED PID $${spawned}"; \
 					active_builds="$${active_builds} $${spawned}:$${i}"; \


More information about the svn-soc-all mailing list