[EMAIL PROTECTED] writes: > 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)
What should we do? Remove popt.la from the package? But what is the general solution? > 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! I just fixed this one single package, Andreas -- Andreas Jaeger, [EMAIL PROTECTED], http://www.suse.de/~aj/ SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg) Maxfeldstr. 5, 90409 Nürnberg, Germany GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
pgpmQg4fTrq5L.pgp
Description: PGP signature
