Hi,
I just had a look on popt (which packages it has a dependency on, which
packages depend on it) and was again astonished by the impact its .la file
(/usr/lib/libpopt.la) has.
Only very few packages really require popt (rpm and libgnome, to name a few).
But the .la file infects all packages above them in the dependency chain so
that they will also depend on popt even if they don't have to. This happens to
affect mostly GNOME packages...
The following packages currently have dependencies on popt-devel although they
don't #include <popt.h>:
gnome-bluetooth-devel
gstreamer010-devel
libgnomeui-devel
libzypp-devel
orbit2-devel
Why? Because of a libtool dependency check that completely ignores the fact
that these dependencies are generated by the .la files. The .la files are not
storing actual dependencies, they are generating new ones.
Just as an example:
# grep popt /usr/lib/libzypp.la
dependency_libs=' /usr/lib/libxml2.la -lcurl /usr/lib/libidn.la -lssl -lcrypto
/usr/lib/librpm.la /usr/lib/librpmdb.la /usr/lib/librpmio.la -ldl -lpthread -lz
-lbz2 /usr/lib/libpopt.la /usr/lib/libgobject-2.0.la /usr/lib/libdbus-glib-1.la
/usr/lib/libgobject-2.0.la /usr/lib/libglib-2.0.la -lnsl
/usr/lib/libglib-2.0.la -lrt /usr/lib/libhal-storage.la /usr/lib/libhal.la
/usr/lib/libhal.la /usr/lib/libdbus-1.la /usr/lib/libdbus-1.la -lboost_regex
-lboost_filesystem -lutil'
But:
# rpm -ql libzypp-devel | xargs grep popt\\.h
(no matches)
# ldd -u -r /usr/bin/zypper
Unused direct dependencies:
/usr/lib/libpopt.so.0
In fact there is no need to link zypp-based programs to popt because zypp does
not expose it, but libtool adds it anyway just because /usr/lib/librpm.la has
it. In short, .la files always contain as many dependencies as possible. These
dependencies were not present if the packages were not installing their .la
files.
Another flaw with this approach is that it's a one-way thing. Dependencies are
added if needed, but never removed.
Example: Some time ago, a package really used popt, so the check told you to
add "Requires: popt-devel" to the -devel package. Later, the package stops
using popt, but the check doesn't notice that and the dependency will stay
forevermore. This is especially annoying if the authors of this package spent
resources into getting rid of that dependency.
# rpm -ql libnotify-devel | grep \\.la
/usr/lib/libnotify.la
# grep popt /usr/lib/libnotify.la
(no matches)
# rpm -ql libnotify-devel | xargs grep popt\\.h
(no matches)
And now the worst thing:
# rpm -ql libnotify | xargs grep popt
/usr/share/doc/packages/libnotify/ChangeLog: - Patch by M.S. to switch
notify-send to use GOption instead of popt,
/usr/share/doc/packages/libnotify/NEWS: * Patch by M.S. to switch notify-send
to use GOption instead of popt,
But it happily requires popt-devel anyway:
# rpm -q --requires libnotify-devel | grep popt
popt-devel
There is no way to get rid of these again other than manually looking at the
packages and manually trying to find out why the dependencies have been added
and if they are still needed. ARGH!
Andreas Hanke
--
"Feel free" - 10 GB Mailbox, 100 FreeSMS/Monat ...
Jetzt GMX TopMail testen: www.gmx.net/de/go/mailfooter/topmail-out
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]