Date: Thu, 03 Jun 2010 15:02:08 +0200 From: Alexander Leidinger <Alexander@Leidinger.net> To: Peter Jeremy <peter@vk2pj.dyndns.org> Cc: ports-list freebsd <freebsd-ports@freebsd.org> Subject: Re: Direct or indirect libdependencies (using the libintl.so.8 case) Message-ID: <20100603150208.19603v4b90d4jeec@webmail.leidinger.net> In-Reply-To: <20100603123728.GA1605@server.vk2pj.dyndns.org> References: <4C04CAAA.7080001@janh.de> <20100603123728.GA1605@server.vk2pj.dyndns.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Quoting Peter Jeremy <peter@vk2pj.dyndns.org> (from Thu, 3 Jun 2010 22:37:28 +1000): > On 2010-Jun-01 10:54:02 +0200, Jan Henrik Sylvester <me@janh.de> wrote: >> Yesterday, I was chasing libintl.so.8, rebuilding all ports that got >> bumped, checking with libchk for other libintl.so.8 dependencies, and >> forcing a rebuild of all these packages: All but two of them had an >> indirect dependency on devel/gettext (and I did email the maintainers of >> devel/ccrtp and textproc/gsed linking without a dependency). > > This might be unrealistic but, IMHO, these "indirect dependencies" should > not exist. IMHO, there should only be two situations: > > 1) Port X directly links against or dlopen's libY.so from port Y. > > In this case, port Y should be listed in LIB_DEPENDS or equivalent > for port X and port X will need a portrevision bump and rebuild if > the port Y ABI changes (eg a .so version bump) > > 2) Port X directly links against or dlopen's libZ.so and libZ.so pulls > in libY.so from port Y. > > In this case, port X should not be directly accessing any symbols in > libY.so. If the libY.so ABI changes, libZ.so will need to be rebuilt > but unless the libZ.so ABI changes, there should be no need to rebuild > port X. > > Are there any other situations that have to be considered? The problem is a little bit more complex if you have a look at the big picture. Indirect dependencies get hardcoded into binaries in several cases(*1), except you use a compiler switch which tells the compile-time-linker to not record library dependencies when no symbols of those libs are reference directly(*2). If you want to know which libs are linked into binaries of a port, I suggest you have a look at my /usr/ports/Tools/scripts/explicit_lib_depends.sh script (note that its name starts with "explicit", not with "direct", this is on purpose as those two descriptions have a different semantic which is important for this discussion). (*1) Either by libtool as it does not has some hint enabled on FreeBSD, or by pkg-config listing them directly even if the corresponding library does not reference symbols of such a dependency in its API. (*2) This is used by some gnome ports (not all), and can not be enabled globally, as some programs may depend upon this (e.g. when loading plugins which are not linked correctly). Bye, Alexander. -- Most people can do without the essentials, but not without the luxuries. http://www.Leidinger.net Alexander @ Leidinger.net: PGP ID = B0063FE7 http://www.FreeBSD.org netchild @ FreeBSD.org : PGP ID = 72077137
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100603150208.19603v4b90d4jeec>