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>