On 10/16/2009 11:06 AM, Mike Edenfield wrote:
> On 10/16/2009 12:54 PM, walt wrote:
>> On 10/16/2009 04:37 AM, Neil Bothwick wrote:
>>> On Fri, 16 Oct 2009 12:20:30 +0100, Peter Humphrey wrote:
>>>
>>>> I thought I'd have a play with swami, but the emerge fails with
>>>> "/bin/sed: can't read /usr/lib64/libogg.la: No such file or directory",
>>>> and indeed there is none such.
>>>
>>> The elog message from the last libogg install explains this. Run
>>> lafilefixer --justfixit.
>>
>> There is no manpage for lafilefixer, but the --help flag prints:
>>
>>        --justfixit       Choose some reasonable dirs, such as
>> /usr/lib*, etc. ,
>>                          find all .la files and fix them to not use
>> .la files
>>                          for linking
>>
>> I can't make sense out of that -- one of the major uses of libtool (I
>> thought)
>> is for linking.  Can anyone 'splain that to me?
> 
> One of the major problems with .la files (besides being mostly useless
> on Linux/FreeBSD/any other ELF-based OS) is when they refer to other .la
> files instead of linking directly to the binaries.  This breaks things
> when they get removed from a ebuild for a library that other libraries
> depend on.
> 
> The only time that libtool archives provide a real benefit is when
> there's a need to link in static libraries that have external
> dependencies -- the libtool archive defines the dependency information
> that can't be stored in the static archive format.  If you don't have
> any publicly-consumed static libraries, .la files are just pointless
> clutter, so package maintainers very often remove them.  Any build
> system depending on libtool for its linking then breaks because the
> dependency chain is broken.
> 
> Take, for example, this very real example from my system.  I have both
> hal and dbus installed; hal depends on dbus, and both packages install
> libtool archives.  In /usr/lib/libhal.la, there is the following:
> 
> # Libraries that this one depends upon.
> dependency_libs=' /usr/lib/libdbus-1.la -lcap -lpthread -lrt'
> 
> Thus, whenever a package that uses hal tells libtool to link to
> libhal.la, libtool recursively links to libdbus-1.la as well.
> 
> Now, say the dbus maintainer suddenly doesn't like .la files (perhaps a
> bad break-up in Los Angeles), and removes them from the ebuild.

I think .la files are an adequate reason to dislike .la files :o)
They have certainly wasted many frustrated hours for me.

> The
> next time I true to use libtool to link in hal, it will fail because the
> latest dbus does not include /usr/lib/libdbus-1.la.
> 
> The fix is to run lafilefixer, which changes the above line to say:
> 
> # Libraries that this one depends upon.
> dependency_libs=' -L/usr/lib -ldbus-1 -lcap -lpthread -lrt'
> 
> So that hal no longer cares whether or not the dbus package installed
> its libtool archive, and all is well.

An excellent 'splain, thank you very much :o)  Thanks also to Volker for
the links to Diego's blogs.  I'm about halfway through them now.


Reply via email to