Date: Mon, 9 Feb 2015 17:16:44 +0000 (UTC) From: Baptiste Daroussin <bapt@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r378742 - in head/Mk: . Scripts Message-ID: <201502091716.t19HGiQm051376@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: bapt Date: Mon Feb 9 17:16:43 2015 New Revision: 378742 URL: https://svnweb.freebsd.org/changeset/ports/378742 QAT: https://qat.redports.org/buildarchive/r378742/ Log: Rework dependency registration Change the way the dependencies are registred so that now it follows the same mechanism as when the *_DEPENDS making the dependency registration system ready to allow multiple packages from the same origin such as flavours and subpackages Also allowing to install twice the same port one built with python33 and the other built with python27 for example. PR: 19702 With help of: antoine Exp-run: portmgr (antoine) Added: head/Mk/Scripts/actual-package-depends.sh (contents, props changed) head/Mk/Scripts/find-lib.sh (contents, props changed) Modified: head/Mk/bsd.port.mk Added: head/Mk/Scripts/actual-package-depends.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/Mk/Scripts/actual-package-depends.sh Mon Feb 9 17:16:43 2015 (r378742) @@ -0,0 +1,72 @@ +#!/bin/sh +# MAINTAINER: portmgr@FeeeBSD.org +# $FreeBSD$ + +if [ -z "${PKG_BIN}" ]; then + echo "PKG_BIN required in environment." >&2 + exit 1 +fi + +resolv_symlink() { + local file tgt + file=${1} + if [ ! -L ${file} ] ; then + echo ${file} + return + fi + + tgt=`readlink ${file}` + case $tgt in + /*) + echo $tgt + return + ;; + esac + + file=${file%/*}/${tgt} + absolute_path ${file} +} + +absolute_path() { + local file myifs target + file=$1 + + myifs=${IFS} + IFS='/' + set -- ${file} + IFS=${myifs} + for el; do + case $el in + .) continue ;; + '') continue ;; + ..) target=${target%/*} ;; + *) target="${target}/${el}" ;; + esac + done + echo ${target} +} + +find_dep() { + pattern=$1 + case ${pattern} in + *\>*|*\<*|*=*) + ${PKG_BIN} info -Eg "${pattern}" 2>/dev/null + return + ;; + /*) + searchfile=$pattern + ;; + *) + searchfile=$(/usr/bin/which ${pattern} 2>/dev/null) + ;; + esac + if [ -n "${searchfile}" ]; then + echo $(resolv_symlink ${searchfile}) >&2 + ${PKG_BIN} which -q ${searchfile} || ${PKG_BIN} which -q "$(resolv_symlink ${searchfile} 2>/dev/null)" || + echo "actual-package-depends: dependency on ${searchfile} not registered (normal if it belongs to base)" >&2 + fi +} + +for lookup; do + ${PKG_BIN} query "\"%n\": {origin: \"%o\", version: \"%v\"}" "$(find_dep ${lookup})" || : +done Added: head/Mk/Scripts/find-lib.sh ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/Mk/Scripts/find-lib.sh Mon Feb 9 17:16:43 2015 (r378742) @@ -0,0 +1,62 @@ +#!/bin/sh +# MAINTAINER: portmgr@FreeBSD.org +# $FreeBSD$ + +if [ -z "${LIB_DIRS}" -o -z "${LOCALBASE}" ]; then + echo "LIB_DIRS, LOCALBASE required in environment." >&2 + exit 1 +fi + +if [ $# -ne 1 ]; then + echo "$0: no argument provided." >&2 +fi + +lib=$1 +dirs="${LIB_DIRS} `cat ${LOCALBASE}/libdata/ldconfig/* 2>/dev/null || :`" + +resolv_symlink() { + local file tgt + file=${1} + if [ ! -L ${file} ] ; then + echo ${file} + return + fi + + tgt=`readlink ${file}` + case $tgt in + /*) + echo $tgt + return + ;; + esac + + file=${file%/*}/${tgt} + absolute_path ${file} +} + +absolute_path() { + local file myifs target + file=$1 + + myifs=${IFS} + IFS='/' + set -- ${file} + IFS=${myifs} + for el; do + case $el in + .) continue ;; + '') continue ;; + ..) target=${target%/*} ;; + *) target="${target}/${el}" ;; + esac + done + echo ${target} +} + +for libdir in ${dirs} ; do + test -f ${libdir}/${lib} || continue + libfile=`resolv_symlink ${libdir}/${lib}` + [ `file -b -L --mime-type ${libfile}` = "application/x-sharedlib" ] || continue + echo $libfile + break +done Modified: head/Mk/bsd.port.mk ============================================================================== --- head/Mk/bsd.port.mk Mon Feb 9 16:28:10 2015 (r378741) +++ head/Mk/bsd.port.mk Mon Feb 9 17:16:43 2015 (r378742) @@ -1766,9 +1766,12 @@ RUN_DEPENDS+= ${LINUX_BASE_PORT} PKG_IGNORE_DEPENDS?= 'this_port_does_not_exist' _GL_gbm_LIB_DEPENDS= libgbm.so:${PORTSDIR}/graphics/gbm -_GL_glesv2_LIB_DEPENDS= libGLESv2.so:${PORTSDIR}/graphics/libglesv2 -_GL_egl_LIB_DEPENDS= libEGL.so:${PORTSDIR}/graphics/libEGL -_GL_gl_LIB_DEPENDS= libGL.so:${PORTSDIR}/graphics/libGL +_GL_glesv2_BUILD_DEPENDS= libglesv2>0:${PORTSDIR}/graphics/libglesv2 +_GL_glesv2_RUN_DEPENDS= libglesv2>0:${PORTSDIR}/graphics/libglesv2 +_GL_egl_BUILD_DEPENDS= libEGL>0:${PORTSDIR}/graphics/libEGL +_GL_egl_RUN_DEPENDS= libEGL>0:${PORTSDIR}/graphics/libEGL +_GL_gl_BUILD_DEPENDS= libGL>0:${PORTSDIR}/graphics/libGL +_GL_gl_RUN_DEPENDS= libGL>0:${PORTSDIR}/graphics/libGL _GL_gl_USE_XORG= glproto dri2proto _GL_glew_LIB_DEPENDS= libGLEW.so:${PORTSDIR}/graphics/glew _GL_glu_LIB_DEPENDS= libGLU.so:${PORTSDIR}/graphics/libGLU @@ -4473,18 +4476,8 @@ lib-depends: target="${DEPENDS_TARGET}"; \ depends_args="${DEPENDS_ARGS}"; \ ${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $${lib}" ; \ - found=0 ; \ - dirs="${LIB_DIRS} `${CAT} ${LOCALBASE}/libdata/ldconfig/* 2>/dev/null || : `" ; \ - for libdir in $$dirs; do \ - test -f $${libdir}/$${lib} || continue; \ - if [ -x /usr/bin/file ]; then \ - _LIB_FILE=`realpath $${libdir}/$${lib}`; \ - [ `file -b -L --mime-type $${_LIB_FILE}` = "application/x-sharedlib" ] || continue ; \ - fi ; \ - found=1 ; \ - ${ECHO_MSG} -n " - found ($${_LIB_FILE})"; \ - done ; \ - if [ $${found} -eq 0 ]; then \ + libfile=`${SETENV} LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $${lib}` ; \ + if [ -z "$${libfile}" ]; then \ ${ECHO_MSG} " - not found"; \ ${ECHO_MSG} "===> Verifying for $$lib in $$dir"; \ if [ ! -d "$$dir" ] ; then \ @@ -4493,7 +4486,7 @@ lib-depends: ${_INSTALL_DEPENDS} \ fi ; \ else \ - ${ECHO_MSG}; \ + ${ECHO_MSG} " - found ($${libfile})"; \ fi ; \ done .endif @@ -4801,9 +4794,11 @@ PACKAGE-DEPENDS-LIST?= \ done ACTUAL-PACKAGE-DEPENDS?= \ - if [ "${_LIB_RUN_DEPENDS}" != " " ]; then \ - ${PKG_QUERY} "\"%n\": {origin: %o, version: \"%v\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} 2>/dev/null || : ; \ - fi + depfiles="" ; \ + for lib in ${LIB_DEPENDS:C/\:.*//}; do \ + depfiles="$$depfiles `${SETENV} LIB_DIRS="${LIB_DIRS}" LOCALBASE="${LOCALBASE}" ${SH} ${SCRIPTSDIR}/find-lib.sh $${lib}`" ; \ + done ; \ + ${SETENV} PKG_BIN="${PKG_BIN}" ${SH} ${SCRIPTSDIR}/actual-package-depends.sh $${depfiles} ${RUN_DEPENDS:C/(.*)\:.*/"\1"/} create-manifest: @${MKDIR} ${METADIR}; \
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502091716.t19HGiQm051376>