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]

Reply via email to