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.sea...@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 _______________________________________________ freebsd-ports@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-ports To unsubscribe, send any mail to "freebsd-ports-unsubscr...@freebsd.org"