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 used. 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 _______________________________________________ Pan-users mailing list Pan-users@nongnu.org https://lists.nongnu.org/mailman/listinfo/pan-users