[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Pan-users] Pan 0.133 refuses to work any longer

From: Duncan
Subject: Re: [Pan-users] Pan 0.133 refuses to work any longer
Date: Sun, 26 Aug 2012 00:52:12 +0000 (UTC)
User-agent: Pan/0.139 (Sexual Chocolate; GIT 1f91845 /usr/src/portage/src/egit-src/pan2)

Rhialto posted on Sat, 25 Aug 2012 15:26:33 +0200 as excerpted:

> Not that there is nothing wrong with pkgconfig. My favourite peeve for
> instance is that often, if a shared library uses some other shared
> library, that dependency is made explicit even when it need not be. That
> results in unnecessary update dependencies: when you're updating some
> lower level library, you are forced to update more than just those
> libraries/programs that actually use it directly.

For that, take a look at the --as-needed linker option (LDFLAGS on many 
builds, often seen as -Wl,--as-needed when passed to the linker via gcc), 
which has been the default on gentoo for awhile now.  That tells the 
linker to only link in directly called for dependencies, not any 
arbitrary library just because something says it needs it.  As such, it 
does tend to eliminate much of the over-linking, but it does produce 
occasional problems with under-linking (which gentoo obviously had to 
patch around before they made it the default, but they do try to be a 
good downstream and pass the patches back upstream, so pretty much 
everything gentoo packages had been fixed upstream too by now, unless of 
course upstream simply doesn't care).

It can make a HUGE difference.  Often nearly half the system will try to 
link to some common low-level libraries (like exiv) if given the chance, 
but they're mostly indirect dependencies thru other, intermediate level 
libraries.  --as-needed strips those indirect deps out, and an upgrade 
that would otherwise require rebuilding as I said nearly half the system 
against the new version, only ends up triggering a rebuild on a handful 
of packages, maybe a tenth of the system if that, if --as-needed has been 

Libtool's perhaps the biggest culprit in overlinking, however, due to all 
those *.la files it creates that include all sorts of indirect deps.  But 
the information contained in all those *.la files is primarily of use for 
static linking, not dynamic linking, where it can be obtained using other 
methods so the *.la files are redundant.  As a consequence, if you choose 
to use dynamic linking whereever possible, it's possible to eliminate 
most of those *.la files (tho they can still be necessary in certain 
instances such as late-linked runtime-loaded plugins), thus eliminating 
that problem along with a few others.  Here, I have an system-wide 
install-mask on *.la files, with a few single-package exceptions where 
they're actually necessary, for libtool itself and for a few plugin 
packages.  That eliminates most of /that/ problem, too.

Between using --as-needed in my LDFLAGS and eliminating nearly all the 
*.la files on the system, I've cut down on update triggered reverse-
dependency rebuilds by at LEAST 80%, I'd say, probably closer to 90%.  
Most of my rebuilds these days are direct-dep rebuilds due to poppler 
(used for pdfs and printing) updates, or various A/V codec updates 
triggering rebuilds of stuff like imagemagik, ffmpeg (libav) and mplayer.

Duncan - List replies preferred.   No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master."  Richard Stallman

reply via email to

[Prev in Thread] Current Thread [Next in Thread]