ports/*/jpeg "Thanks a lot guys"

Mel Flynn mel.flynn+fbsd.ports at mailing.thruhere.net
Mon Aug 3 21:34:07 UTC 2009


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 at 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



More information about the freebsd-ports mailing list