Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 May 2011 20:08:44 +0000
From:      Alexey Dokuchaev <danfe@FreeBSD.org>
To:        Brooks Davis <brooks@one-eyed-alien.net>
Cc:        cvs-ports@FreeBSD.ORG, cvs-all@FreeBSD.ORG, ports-committers@FreeBSD.ORG
Subject:   Re: cvs commit: ports/sysutils/ganglia-webfrontend Makefile pkg-plist
Message-ID:  <20110527200844.GA43111@FreeBSD.org>
In-Reply-To: <20110527111529.GB24282@lor.one-eyed-alien.net>
References:  <201105252314.p4PNEeV0010445@repoman.freebsd.org> <20110527025402.GA2175@FreeBSD.org> <20110527111529.GB24282@lor.one-eyed-alien.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, May 27, 2011 at 06:15:29AM -0500, Brooks Davis wrote:
> On Fri, May 27, 2011 at 02:54:02AM +0000, Alexey Dokuchaev wrote:
> > Hmm, I believe "abusing" FOO_DEPENDS is pretty bad practice to follow
> > without sufficiently compelling reason.  In this case, what prevents you
> > properly listing them as BUILD_DEPENDS?  For users building from ports
> > it would not make a difference, but packages will have sane dependencies,
> > no (unless I'm missing something)?
> 
> The package depend tree will be identical because the package always
> depends on ganglia-monitor-core which legitimately depends on those
> libraries.  Since all I care about in this case is that the libraries
> exist sufficiently to satisfy configure I'd rather not use the
> significantly inferior BUILD_DEPENDS mechanism which requires me to
> hardcode LOCALBASE in the search path.

I'm afraid I still do not get it.  What's so inferior to depend on some
file (relative to ${LOCALBASE}) if that's what really required?  While I
understand that BUILD_DEPENDS lines might look longer than LIB_DEPENDS
ones, but that's only because BUILD_DEPENDS are inherently special: while
LIB_DEPENDS item is clearly defined shared library with standard usage
semantics, BUILD_DEPENDS generally cannot be implemented that concisely,
because we do not apriori know exactly which file a port depends on,
thus -- fully qualified path.  Technically it seems excessive (e.g.
while BUILD_DEPENDS is defined, all provided files are installed), but
it is useful to keep track of what port needs, and it makes easier to
adjust _DEPENDS later as appropriate.  This is what I've been trying to
enforce for quite a long time: out ports should be stateful.  Right now,
it is often required to deeply examine the port itself (CVS history) and
original vendor's sources to get a clue what's exactly going on, quite
often because of incorrect dependencies records!

> Now that I think of it, a better solution is probably to just delete
> those parts of the configure script when building this package.

As I see it, the whole issue (in general case) boils down to this:

- If port (not its dependencies!) installs executable that dynamically
  links to a libfoo.so, add libfoo.so provider port to LIB_DEPENDS

- If port loads shared object via dlopen(3) -- add it to RUN_DEPENDS.
  Adding this library as LIB_DEPENDS won't save you from ABI breakage
  anyways; either port maintainer (or, better, upstream author) should
  keep track of these issues to ensure everything is nice and dainty.
  Last but not least: dlopen(3) is runtime thing, so LIB_DEPENDS is
  wrong from common sense (we presume that ports framework does not
  contradict common sense; if it does, we're in a much worse trouble)

- If both configure script *and* build require some header file or
  statically links to an archive (*.a) -- set BUILD_DEPENDS accordingly

- If configure script *bogusly* requires something (we all know how
  crappy this autotools generated stuff can be) -- patch the script

./danfe



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110527200844.GA43111>