[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

Attachment: pgpmQg4fTrq5L.pgp
Description: PGP signature

Reply via email to