Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Aug 2009 13:34:03 -0800
From:      Mel Flynn <mel.flynn+fbsd.ports@mailing.thruhere.net>
To:        freebsd-ports@freebsd.org
Cc:        Peter Jeremy <peterjeremy@optushome.com.au>
Subject:   Re: ports/*/jpeg "Thanks a lot guys"
Message-ID:  <200908031334.04099.mel.flynn%2Bfbsd.ports@mailing.thruhere.net>
In-Reply-To: <20090801224323.GA65040@server.vk2pj.dyndns.org>
References:  <20090731173636.GA76357@owl.midgard.homeip.net> <4A747C77.1040800@infracaninophile.co.uk> <20090801224323.GA65040@server.vk2pj.dyndns.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Saturday 01 August 2009 14:43:23 Peter Jeremy wrote:
> [I was also dismayed when I saw the bump].
>
> On 2009-Aug-01 18:33:43 +0100, Matthew Seaman
> <m.seaman@infracaninophile.co.uk> wrote:
> >You could, for instance, run ldd(1) against each of the files a port
> > installs and then record in /var/db/pkg/portname-1.2.3/+SHLIBS or
> > equivalently in the .tbz package tarball a sorted and uniq'd list of all
> > the shared libraries linked against.
>
> Unfortunately, this isn't sufficient because a non-trivial number of
> ports dlopen() libraries rather than directly linking against them.
> (The Xorg server is probably the most widely used culprit here).
>
> >  Or you could resolve the shlib filenames back to the ports
> >that supply them, and create a 'SHLIB_PORTS_NEEDED' variable in the port
> >Makefiles.
>
> A third approach is to more carefully recurse through the dependency
> tree: Given A depends on B depends on C, B only needs bumping if it
> LIB_DEPENDS on A and C only needs bumping if it LIB_DEPENDS on B and
> B was bumped.

Unfortunately, qt4-* ports slice this idea. Because they don't use
LIB_DEPENDS, but a version dependant RUN and BUILD depends. I've coded a
"patch-recursive" target in my Mk/bsd.local.mk that can't depend just on
LIB_DEPENDS for this very reason (I needed the target so I can debug
crashes in kde4 programs, and have gdb's `list' command working).
-- 
Mel

_LIB_DEPEND_DIRS=${LIB_DEPENDS:C,^[^:]*:([^:]*).*$,\1,}
_QT4_DEPEND_DIRS=${BUILD_DEPENDS:Mqt4-*:C,^[^:]*:([^:]*).*$,\1,}

LIB-DEPENDS-LIST= \
    L="${_LIB_DEPEND_DIRS} ${_QT4_DEPEND_DIRS}";            \
    checked="";                         \
    while [ -n "$$L" ]; do                      \
        l="";                           \
        for d in $$L; do                    \
            case $$checked in               \
            $$d\ *|*\ $$d\ *|*\ $$d)            \
                continue;;              \
            esac;                       \
            checked="$$checked $$d";            \
            if [ ! -d $$d ]; then               \
                ${ECHO_MSG} "${PKGNAME}: \"$$d\" non-existent -- dependency list incomplete" >&2; \
                continue;               \
            fi;                     \
            ${ECHO_CMD} $$d;                \
            if ! children=$$(cd $$d && ${MAKE} -V _LIB_DEPEND_DIRS); then\
                ${ECHO_MSG} "${PKGNAME}: \"$$d\" erroneous -- dependency list incomplete" >&2; \
                continue;               \
            fi;                     \
            for child in $$children; do         \
                case "$$checked $$l" in         \
                $$child\ *|*\ $$child\ *|*\ $$child)    \
                    continue;;          \
                esac;                   \
                l="$$l $$child";            \
            done;                       \
        done;                           \
        L=$$l;                          \
    done

patch-recursive:
    @for dir in ${.CURDIR} $$(${LIB-DEPENDS-LIST}); do \
        echo "===> $${dir}"; \
        ${MAKE} -C $${dir} patch; \
    done

show-libdepends-recursive:
    @for dir in ${.CURDIR} $$(${LIB-DEPENDS-LIST}); do \
        echo "===> $${dir}"; \
    done




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200908031334.04099.mel.flynn%2Bfbsd.ports>