Date: Tue, 21 Apr 2015 18:16:31 +0000 (UTC) From: Bryan Drewery <bdrewery@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r384436 - head/Mk Message-ID: <201504211816.t3LIGVdQ068618@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bdrewery Date: Tue Apr 21 18:16:31 2015 New Revision: 384436 URL: https://svnweb.freebsd.org/changeset/ports/384436 Log: Add a STRICT_DEPENDS feature which validates dependencies are installed, does not install missing ones, and considers any missing ones as fatal. This will be used by Poudriere to validate dependency lines are correct. An example case is: RUN_DEPENDS= foo:${PORTSDIR}/ports-mgmt/bar where the port does not provide anything named 'foo'. In every phase it will attempt to install the bar port to satisfy the depdendency and continue to fail to satisfy it. This can eventually lead to unexpected errors such as trying to install a port in the 'stage' phase when running as non-root and will encounter a pkg(8) permissions issue. This sort of issue occurred in http://lists.freebsd.org/pipermail/freebsd-ports/2015-April/098892.html Discussed with: bapt With hat: portmgr Modified: head/Mk/bsd.port.mk Modified: head/Mk/bsd.port.mk ============================================================================== --- head/Mk/bsd.port.mk Tue Apr 21 18:03:22 2015 (r384435) +++ head/Mk/bsd.port.mk Tue Apr 21 18:16:31 2015 (r384436) @@ -1018,6 +1018,9 @@ FreeBSD_MAINTAINER= portmgr@FreeBSD.org # - If set, it will overwrite any existing package # registration information in ${PKG_DBDIR}/${PKGNAME}. # NO_DEPENDS - Don't verify build of dependencies. +# STRICT_DEPENDS +# - Verify dependencies but consider missing dependencies as +# fatal. # CHECKSUM_ALGORITHMS # - Different checksum algorithms to check for verifying the # integrity of the distfiles. The absence of the algorithm @@ -4350,7 +4353,7 @@ _INSTALL_DEPENDS= \ else \ (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \ fi; \ - else \ + elif [ -z "${STRICT_DEPENDS}" ]; then \ (cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \ fi; \ ${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; @@ -4359,7 +4362,7 @@ _INSTALL_DEPENDS= \ ${deptype:tl}-depends: .if defined(${deptype}_DEPENDS) .if !defined(NO_DEPENDS) - @set -e ; for i in `${ECHO_CMD} "${${deptype}_DEPENDS}"`; do \ + @set -e ; anynotfound=0; for i in `${ECHO_CMD} "${${deptype}_DEPENDS}"`; do \ prog=$${i%%:*}; \ if [ -z "$$prog" ]; then \ ${ECHO_MSG} "Error: there is an empty port dependency in ${deptype}_DEPENDS."; \ @@ -4441,6 +4444,7 @@ ${deptype:tl}-depends: fi; \ fi; \ if [ $$notfound != 0 ]; then \ + anynotfound=1; \ ${ECHO_MSG} "===> Verifying $$target for $$prog in $$dir"; \ if [ ! -d "$$dir" ]; then \ ${ECHO_MSG} " => No directory for $$prog. Skipping.."; \ @@ -4448,7 +4452,12 @@ ${deptype:tl}-depends: ${_INSTALL_DEPENDS} \ fi; \ fi; \ - done + done; \ + if [ -n "${STRICT_DEPENDS}" -a $${anynotfound} -eq 1 ]; then \ + ${ECHO_MSG} "===> STRICT_DEPENDS set - Not installing missing dependencies."; \ + ${ECHO_MSG} " This means a dependency is wrong since it was not satisfied in the ${deptype:tl}-depends phase."; \ + exit 1; \ + fi .endif .else @${DO_NADA} @@ -4458,7 +4467,7 @@ ${deptype:tl}-depends: lib-depends: .if defined(LIB_DEPENDS) && !defined(NO_DEPENDS) @set -e ; \ - for i in ${LIB_DEPENDS}; do \ + anynotfound=0; for i in ${LIB_DEPENDS}; do \ lib=$${i%%:*} ; \ dir=$${i#*:} ; \ target="${DEPENDS_TARGET}"; \ @@ -4466,6 +4475,7 @@ lib-depends: ${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $${lib}" ; \ libfile=`${SETENV} LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $${lib}` ; \ if [ -z "$${libfile}" ]; then \ + anynotfound=1; \ ${ECHO_MSG} " - not found"; \ ${ECHO_MSG} "===> Verifying for $$lib in $$dir"; \ if [ ! -d "$$dir" ] ; then \ @@ -4476,7 +4486,12 @@ lib-depends: else \ ${ECHO_MSG} " - found ($${libfile})"; \ fi ; \ - done + done; \ + if [ -n "${STRICT_DEPENDS}" -a $${anynotfound} -eq 1 ]; then \ + ${ECHO_MSG} "===> STRICT_DEPENDS set - Not installing missing dependencies."; \ + ${ECHO_MSG} " This means a dependency is wrong since it was not satisfied in the lib-depends phase."; \ + exit 1; \ + fi .endif .endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201504211816.t3LIGVdQ068618>