socsvn commit: r238050 - soc2012/scher/par_ports/head/Mk
scher at FreeBSD.org
scher at FreeBSD.org
Thu Jun 21 08:36:52 UTC 2012
Author: scher
Date: Thu Jun 21 08:36:49 2012
New Revision: 238050
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238050
Log:
[new_feature] ${PORT_DBDIR} locking
[new_feature] redesign of OPTIONS checking
OPTIONS are configured recursively for port and it's dependencies on
non-parallel stages, before each of the default targets
(pkg, fetch, extract, patch, configure, build, install, package and check-sanity).
While configuring OPTIONS ${PORT_DBDIR} is locked, thus only one
configuration per time may be implemented.
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 Thu Jun 21 07:48:14 2012 (r238049)
+++ soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Thu Jun 21 08:36:49 2012 (r238050)
@@ -143,6 +143,7 @@
LOCK_DIR= /var/db/portlocks
_parv_PKG_DBDIR_LOCK_FILE= .lock
+_parv_PORT_DBDIR_LOCK_FILE= .lock
_parv_LOCK_DIR_LOCK_FILE= ${PKGNAME}
_parv_WAIT_FOR_LOCK_TIME?= 5
@@ -156,11 +157,12 @@
_parv_MAKE_LOCK_EXIT_STATUS= 158
-.for _lock_dir in PKG_DBDIR LOCK_DIR
+.for _lock_dir in PKG_DBDIR PORT_DBDIR LOCK_DIR
# ${${_lock_dir}} == ${PKG_DBDIR} OR ${LOCK_DIR}
# _parv_PKG_DBDIR_LOCK_SEQ
# _parv_LOCK_DIR_LOCK_SEQ
+# _parv_PORT_DBDIR_LOCK_SEQ
#
# Senquence of commands to lock a directory using ${_parv_${_lock_dir}_LOCK_FILE}.
# During evaluation of the following commands lockf(1) is holding lock on
@@ -177,6 +179,7 @@
${CHMOD} ${_parv_UMASK} ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE}; \
pid=$$(${CAT} ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE}); \
if [ $${pid} ]; then \
+ [ $${pid} -eq ${.MAKE.PID} ] && exit 0; \
ps -p $${pid} > /dev/null && status=$$? || status=$$?; \
if [ $${status} -eq 0 ]; then \
if [ ${_lock_dir} = "LOCK_DIR" ]; then \
@@ -217,6 +220,7 @@
# _parv_PKG_DBDIR_DO_LOCK
# _parv_LOCK_DIR_DO_LOCK
+# _parv_PORT_DBDIR_DO_LOCK
# This scripts handles exit status of lockf(1) call.
# It substitutes exit status 75 of lockf(1) for ${_parv_ON_LOCK_EXIT_STATUS}
# and pushes it.
@@ -239,6 +243,7 @@
# _parv_PKG_DBDIR_LOCK_LOOP
# _parv_LOCK_DIR_LOCK_LOOP
+# _parv_PORT_DBDIR_LOCK_LOOP
# Loops to lock a directory
# $${attempts} - Number of attempts to lock a directory. Exetranal variable.
# Default: 1, if this var is not set.
@@ -279,6 +284,7 @@
# _parv_PKG_DBDIR_DO_UNLOCK
# _parv_LOCK_DIR_DO_UNLOCK
+# _parv_PORT_DBDIR_DO_UNLOCK
#
_parv_${_lock_dir}_DO_UNLOCK= \
lockf -k -t ${_parv_WAIT_FOR_UNLOCK_TIME} ${${_lock_dir}}/${_parv_${_lock_dir}_LOCK_FILE} ${SH} -c '{ \
@@ -356,6 +362,26 @@
# End of Locking variables and tools section
#####################################################
+locking-config-recursive: locking-config-message lock-port-dbdir config-conditional config-recursive unlock-port-dbdir
+
+locking-config-message:
+ @${ECHO_MSG} "===> Setting user-specified options for ${PKGNAME} and dependencies";
+
+config-recursive:
+ @for dir in $$(${ALL-DEPENDS-LIST}); do \
+ while true; do \
+ ( cd $$dir; ${MAKE} config-conditional ) || { \
+ status=$$?; \
+ if [ $${status} -eq ${_parv_MAKE_LOCK_EXIT_STATUS} ]; then \
+ sleep ${_parv_LOCK_ATTEMPT_TIMEOUT}; \
+ continue; \
+ else \
+ exit 1; \
+ fi; \
+ }; \
+ break; \
+ done; \
+ done
check-lock:
@( pkg_name=${PKGNAME}; ${_parv_CHECK_LOCK} ) || { ${_parv_ON_LOCK_EXIT_SEQ}; }
@@ -388,9 +414,15 @@
fi
.endif
+lock-port-dbdir:
+ @attempts=-1; ${_parv_PORT_DBDIR_LOCK_LOOP}
+
lock-pkg-dbdir:
@attempts=-1; ${_parv_PKG_DBDIR_LOCK_LOOP}
+unlock-port-dbdir:
+ @${_parv_PORT_DBDIR_DO_UNLOCK}
+
unlock-pkg-dbdir:
@${_parv_PKG_DBDIR_DO_UNLOCK}
Modified: soc2012/scher/par_ports/head/Mk/bsd.port.mk
==============================================================================
--- soc2012/scher/par_ports/head/Mk/bsd.port.mk Thu Jun 21 07:48:14 2012 (r238049)
+++ soc2012/scher/par_ports/head/Mk/bsd.port.mk Thu Jun 21 08:36:49 2012 (r238050)
@@ -1171,11 +1171,21 @@
_parv_PARALLEL_BUILDS_NUMBER= 1
.endif
+.if !target(lock-port-dbdir)
+lock-port-dbdir:
+ @${DO_NADA}
+.endif
+
.if !target(lock-pkg-dbdir)
lock-pkg-dbdir:
@${DO_NADA}
.endif
+.if !target(unlock-port-dbdir)
+unlock-port-dbdir:
+ @${DO_NADA}
+.endif
+
.if !target(unlock-pkg-dbdir)
unlock-pkg-dbdir:
@${DO_NADA}
@@ -1186,6 +1196,16 @@
@${DO_NADA}
.endif
+.if !target(locking-config-recursive)
+locking-config-recursive:
+ @${DO_NADA}
+.endif
+
+.if !target(locking-config-message)
+locking-config-message:
+ @${DO_NADA}
+.endif
+
############### ENDF OF PAR_PORTS SPECIFIC COMMENT LINE ###############
#
@@ -4339,11 +4359,11 @@
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
+ options-message locking-config-recursive
-_PKG_DEP= check-sanity
+_PKG_DEP= check-sanity locking-config-recursive
_PKG_SEQ= pkg-depends
-_FETCH_DEP= pkg
+_FETCH_DEP= pkg locking-config-recursive
_FETCH_SEQ= fetch-depends pre-fetch pre-fetch-script \
do-fetch post-fetch post-fetch-script
_EXTRACT_DEP= fetch
@@ -4400,7 +4420,7 @@
.if !target(${target}) && defined(_OPTIONS_OK)
${target}: ${${target:U}_COOKIE}
.elif !target(${target})
-${target}: config-conditional
+${target}: locking-config-recursive config-conditional
@cd ${.CURDIR} && ${MAKE} CONFIG_DONE_${UNIQUENAME:U}=1 ${${target:U}_COOKIE}
.elif target(${target}) && defined(IGNORE)
.endif
More information about the svn-soc-all
mailing list