Packaging policy for libtool .la files

Kevin Kofler kevin.kofler at chello.at
Sun Feb 22 17:23:35 UTC 2009


Sam Varshavchik wrote:
> Is there a set of packaging guidelines for libtool's .la files?
> 
> There seems to be some inconsistency here.
> 
> 1) libieee1284 and libieee1284-devel: .la files are installed by
> libieee1284-devel rpm
> 
> 2) arts and arts-devel: .la files are installed by the arts rpm
> 
> 3) gnutls: the spec file removes and does not install the .la files

#3 is the policy.
https://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Static_Libraries
(and no, the policy is not only for static libraries).

The KDE 3 plugin loader fails to work if you don't have a .la file for the
plugin (it's fixed in KDE 4), this may be why arts installs the .la files,
I'll have to check. But other than that, no, they should not be included.

> From what I can tell, #1 should be the policy. I do not believe that .la
> files are needed at runtime. libtool uses them only during the compile and
> link cycle. Furthermore, I'd question the decision to remove them
> completely, unless having them actually creates a problem.

It creates a problem: it forces linking indirect dependencies directly and
so you have to BuildRequire a lot more -devel packages than actually
needed. The unnecessary linkage also slows application loading down at
runtime.

> I needed to work with a newer version of gnutls. I used the spec file and
> forced _prefix to /usr/local, to have everything installed there.

This is not supported. Fedora packages are not expected to be relocatable:
https://fedoraproject.org/wiki/Packaging:Guidelines#Relocatable_packages
In fact, gnutls clearly isn't, which is why you had to rebuild it in the
first place, but even rebuilding with a new prefix doesn't fix all the
problems.

> What I found that even if I properly build and link against /usr/local, at
> runtime my rpath is not set correctly, and the binary loads
> /usr/lib64/libgnutls.so.26, instead of /usr/local/lib64/libgnutls.so.26,
> even though I linked against it. I had to hack out the spec file and put
> the .la files into libgnutls-devel, so that at linktime, libtool could
> sprinkle its pixie dust and put the correct rpath into the resulting ELF
> object.

RPATHs are frowned upon in Fedora:
https://fedoraproject.org/wiki/Packaging:Guidelines#Beware_of_Rpath

They're also the wrong solution here, what you really want is to
have /usr/local/lib64 listed in your ld.so.conf or ld.so.conf.d. I wonder
why that isn't the default.

And FWIW I don't think installing to /usr/local is a good solution to make 2
versions of libs coexist. RPMs should not install to /usr/local (and in
fact official Fedora RPMs MUST NOT install to /usr/local).

        Kevin Kofler




More information about the fedora-devel-list mailing list