Date: Mon, 02 Jul 2012 21:28:42 +0000 From: scher@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r238854 - soc2012/scher/par_ports/head/Mk Message-ID: <20120702212842.BB26E106564A@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: scher Date: Mon Jul 2 21:28:42 2012 New Revision: 238854 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=238854 Log: [bugfix] fixed bug, when in some cases keyboard interrupts were not triggered by trap in XXX-depends targets Modified: soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Modified: soc2012/scher/par_ports/head/Mk/bsd.parallel.mk ============================================================================== --- soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Mon Jul 2 21:24:05 2012 (r238853) +++ soc2012/scher/par_ports/head/Mk/bsd.parallel.mk Mon Jul 2 21:28:42 2012 (r238854) @@ -14,7 +14,7 @@ # matter what value is assigned. # Example: _parv_WANT_PARALLEL_BUILD=yes # -# _parv_CHECK_ACTIVE_TIMEOUT - timeout in seconds before next check of active +# _parv_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. @@ -34,7 +34,7 @@ # next attempt to lock a directory. Default: 2 # # _parv_ON_LOCK_FEEDBACK_TIMEOUT -while trying to lock a directory in "while" -# loop, if the directory is locked, user +# loops, if the directory is locked, user # feedback is printed once in # ${_parv_ON_LOCK_FEEDBACK_TIMEOUT} attempts. # Default: 2 @@ -46,6 +46,9 @@ # ${_parv_DEFAULT_PAR_BUILDS_NUM}, then it will # be set to ${_parv_DEFAULT_PAR_BUILDS_NUM}. # +# _parv_PORTS_LOGS_DIR - directory that contains dependency ports' log files. +# Default: /tmp/portslogs +# # The following variables are not assumed to be changed by user # # _parv_ON_LOCK_EXIT_STATUS - if the directory is locked script exits with @@ -67,6 +70,16 @@ # This file contains PID of the process, that # locked ${LOCK_DIR}. # +# _parv_PORT_LOG_FILE - name of dependency port's log file. +# Value: $$(cd $$dir; ${MAKE} -V PKGNAME)-spawned-by-pid${.MAKE.PID}.log +# where $${dir} is a dependency port's directory +# in ports tree. +# +# _parv_CHECKED_CONFIG_F_PREFIX - file name prefix for file in which already +# checked directories are stored while evaluating +# "config-recursive" target. Full file name is +# ${_parv_CHECKED_CONFIG_F_PREFIX}.${.MAKE.PID} +# # _parv_DEFAULT_TARGETS - sequence of bsd.port.mk targets. If at least # one of this targets is encounted in ${.TARGETS} # then port's directory has to be locked. @@ -74,6 +87,24 @@ # _parv_DEFAULT_PAR_BUILDS_NUM - default number of parallel dependency builds. # Value: number of logical CPUs on user's machine. # +# The following targets may be used by user +# +# check-license-depends - license checking for port's dependencies. +# Does not lock any directory. +# If any dependencies need to ask for comfirmation +# then port's build stops, and user is listed all +# ports that will ask for licences checking. +# Then a user will have to eval "make patch" for the +# above mentioned ports. Only if no dependencies +# require license confirmation parallel ports build +# will be allowed. +# +# locking-config-recursive - Configure options for current port and all dependencies +# recursively, while holding lock on +# ${_parv_PORT_DBDIR_LOCK_LOOP}. Considers dynamic +# changes in port's dependencies. Skips already checked +# ports. +# .if !defined(_POSTMKINCLUDED) && !defined(Parallel_Pre_Include) Parallel_Pre_Include= bsd.parallel.mk @@ -84,7 +115,7 @@ _parv_KILL_SIGNAL= USR1 _parv_PKILL= /bin/pkill _parv_PKILL_FLAGS= -P -_parv_UMASK= 777 +_parv_UMASK= 0644 DO_NADA?= ${TRUE} # End of Commands section @@ -140,20 +171,19 @@ ##################################################### # Locking variables and tools -# TODO: docs is needed _parv_PORTS_LOGS_DIR?= /tmp/portslogs LOCK_DIR?= /var/db/portslocks _parv_PKG_DBDIR_LOCK_FILE= .lock _parv_PORT_DBDIR_LOCK_FILE= .lock _parv_LOCK_DIR_LOCK_FILE= ${PKGNAME} -# TODO: docs is needed _parv_PORT_LOG_FILE= $$(cd $$dir; ${MAKE} -V PKGNAME)-spawned-by-pid${.MAKE.PID}.log +_parv_CHECKED_CONFIG_F_PREFIX= already-checked-config + _parv_WAIT_FOR_LOCK_TIME?= 5 _parv_WAIT_FOR_UNLOCK_TIME?= 15 _parv_LOCK_ATTEMPT_TIMEOUT?= 2 -# TODO: change docs _parv_ON_LOCK_FEEDBACK_TIMEOUT?= 2 _parv_CHECK_ACTIVE_TIMEOUT?= 2 @@ -163,20 +193,6 @@ _parv_MAKE_LOCK_EXIT_STATUS= 158 -_parv_CHECK_DIRS_SANITY= \ - if [ ! -d ${LOCK_DIR} ]; then \ - ${_dparv_START_OUTPUT}; \ - ${ECHO_CMD} "Creating ports locks dir"; \ - ${_dparv_END_OUTPUT}; \ - ${MKDIR} ${LOCK_DIR}; \ - fi; \ - if [ ! -d ${_parv_PORTS_LOGS_DIR} ]; then \ - ${_dparv_START_OUTPUT}; \ - ${ECHO_CMD} "Creating ports logs dir"; \ - ${_dparv_END_OUTPUT}; \ - ${MKDIR} ${_parv_PORTS_LOGS_DIR}; \ - fi - .for _lock_dir in PKG_DBDIR PORT_DBDIR LOCK_DIR # ${${_lock_dir}} == ${PKG_DBDIR} OR ${LOCK_DIR} @@ -192,6 +208,7 @@ # Stalled locks cheking enabled. # # If the directory is locked this script returns ${_parv_ON_LOCK_EXIT_STATUS}. +# # Process is allowed to work in locked port's directory if and only if it is locked # by it's parent process. # @@ -235,6 +252,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. @@ -258,6 +276,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. @@ -317,6 +336,7 @@ # _parv_CHECK_SEQ # _parv_CHECK_LOCK +# # The former variables implement check for lock utility. # $${pkg_name} - port to check, since ${_parv_LOCK_DIR_LOCK_FILE} = ${PKGNAME} # External variable for script. Supports sh(1) patterns @@ -324,7 +344,7 @@ # value before executing this script. # e.g. ( pkg_name=apache-[1234]; ${_parv_CHECK_LOCK} ) || ... # Script exits with exit status ${_parv_ON_LOCK_EXIT_STATUS} if $${pkg_name} is locked -# +# _parv_CHECK_SEQ= \ ${CHMOD} ${_parv_UMASK} ${LOCK_DIR}/$${pkg_name}; \ pid=\$$(${CAT} ${LOCK_DIR}/$${pkg_name}); \ @@ -380,7 +400,31 @@ # End of Locking variables and tools section ##################################################### -# +_parv_CHECK_DIRS_SANITY= \ + if [ ! -d ${LOCK_DIR} ]; then \ + ${_dparv_START_OUTPUT}; \ + ${ECHO_CMD} "Creating ports locks dir"; \ + ${_dparv_END_OUTPUT}; \ + ${MKDIR} ${LOCK_DIR}; \ + fi; \ + if [ ! -d ${_parv_PORTS_LOGS_DIR} ]; then \ + ${_dparv_START_OUTPUT}; \ + ${ECHO_CMD} "Creating ports logs dir"; \ + ${_dparv_END_OUTPUT}; \ + ${MKDIR} ${_parv_PORTS_LOGS_DIR}; \ + fi + +_parv_PRINT_ACTIVE_BUILDS= \ + ${ECHO_CMD} " Currently building dependency ports are"; \ + for build in $$( ${ECHO_CMD} "$${active_builds}" ); do \ + dep=$${build\#*:}; \ + dir=$${dep\#*:}; \ + target=$${dep\#\#*:}; \ + [ $$dir != $$target ] && dir=$${dir%%:*}; \ + ${ECHO_CMD} " $$(cd $${dir}; ${MAKE} -V PKGNAME)"; \ + done + + # _PROCESS_ACTIVE_BUILDS - this script contains all magic, related to # processing of background dependecy builds. # @@ -393,16 +437,6 @@ # tuples of all currently being processed ports, # spawned by this make process. # -_parv_PRINT_ACTIVE_BUILDS= \ - ${ECHO_CMD} " Currently building dependency ports are"; \ - for build in $$( ${ECHO_CMD} "$${active_builds}" ); do \ - dep=$${build\#*:}; \ - dir=$${dep\#*:}; \ - target=$${dep\#\#*:}; \ - [ $$dir != $$target ] && dir=$${dir%%:*}; \ - ${ECHO_CMD} " $$(cd $${dir}; ${MAKE} -V PKGNAME)"; \ - done - _PROCESS_ACTIVE_BUILDS= \ enable_feedback=${_parv_ON_LOCK_FEEDBACK_TIMEOUT}; \ while true; do \ @@ -468,7 +502,12 @@ fi; \ done -# TODO: docs needed +# _parv_CHECK_ALL_DEPS_LOCKED +# +# This script prevents infinity non-sleeping loop in XXX-depends targets. +# If all dependencies in corresponding XXX_DEPENDS variable are locked +# then parent make process will sleep ${_parv_CHECK_ACTIVE_TIMEOUT} seconds. +# _parv_CHECK_ALL_DEPS_LOCKED= \ if ! [ $${\#depends} -eq 0 ]; then \ enable_feedback=${_parv_ON_LOCK_FEEDBACK_TIMEOUT}; \ @@ -493,7 +532,7 @@ # # _TERMINATE_PROCESS_TREE - this script contains all magic, related to -# terminating of the whole process tree, starting +# termination of the whole process tree, starting # from ${.MAKE.PID}. # This script implements Breadth-first traversal of # the process tree. It prevents processes of the @@ -536,8 +575,6 @@ # Parallel targets section # TODO: outline intergation with bsd.port.mk # - -#TODO doc is needed .if !defined(INSTALLS_DEPENDS) check-license-depends: check-license-message @license_to_ask=""; \ @@ -568,7 +605,6 @@ check-license-message: @${ECHO_MSG} "===> Checking out licenses for ${PKGNAME} dependencies"; -#TODO doc is needed .if !defined(CONFIG_DONE_${UNIQUENAME:U}) && !defined(INSTALLS_DEPENDS) locking-config-recursive: locking-config-message lock-port-dbdir config-recursive unlock-port-dbdir .endif @@ -576,11 +612,6 @@ locking-config-message: @${ECHO_MSG} "===> Setting user-specified options for ${PKGNAME} and dependencies"; -# TODO: doc is needed -# TODO: shift to the beginning -_parv_CHECKED_CONFIG_F_PREFIX= already-checked-config - -# TODO: doc is needed config-recursive: config-conditional @if [ ! ${DEP_CHECK_CONFIG} ]; then \ already_checked_file=/tmp/${_parv_CHECKED_CONFIG_F_PREFIX}.${.MAKE.PID}; \
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120702212842.BB26E106564A>