From owner-svn-soc-all@FreeBSD.ORG Tue May 29 16:05:20 2012 Return-Path: Delivered-To: svn-soc-all@FreeBSD.org Received: from socsvn.FreeBSD.org (unknown [IPv6:2001:4f8:fff6::2f]) by hub.freebsd.org (Postfix) with SMTP id E0219106564A for ; Tue, 29 May 2012 16:05:18 +0000 (UTC) (envelope-from scher@FreeBSD.org) Received: by socsvn.FreeBSD.org (sSMTP sendmail emulation); Tue, 29 May 2012 16:05:18 +0000 Date: Tue, 29 May 2012 16:05:18 +0000 From: scher@FreeBSD.org To: svn-soc-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Message-Id: <20120529160518.E0219106564A@hub.freebsd.org> Cc: Subject: socsvn commit: r236669 - soc2012/scher/par_ports/head/Mk X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 May 2012 16:05:21 -0000 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