Gentoo Archives: gentoo-user

From: "Diego Elio Pettenò" <flameeyes@×××××.com>
To: gentoo-user@l.g.o
Subject: [gentoo-user] Notice: possible past, present and future breakage related to .la files
Date: Wed, 29 Sep 2010 22:41:20
Message-Id: 1285800006.6591.313.camel@yamato.local
Hi all users,

Some of you might have noticed, others might notice, a few would
probably not notice at all, that some Gentoo developers have started
removing the libtool archive files from packages that they maintain;
these changes have some times been applied to stable ebuilds as well,
but in all cases they won't be applied unless the package is re-emerged.

The reasoning behind this removal is too long to explain in this mail,
but you can find the start of it in [1], [2], and you can find some more
details in [3], [4] (yes these are all posts from my blog that I wrote
in the past few years). What matters to you (users) is that removing .la
files makes it less likely that unexpected libraries get linked in your
executables, even without --as-needed, or where --as-needed is not
working correctly.

If it sounds familiar as a situation, you might have gone through the
now-infamous libpng14 upgrade earlier this year [5], [6].

Removing .la files can cause, though, temporary disruption in the build
processes of libraries depending on those involved, because of the
transitive nature of .la files. For instance you could experiences
something like this:

libtool: link: `/usr/lib/' is not a valid libtool archive

with being replaced by other library names. If this is the
case, _do not panic_! Nothing is irremediably broken and nothing will
have to be rebuilt!

First of all, you should install lafilefixer and let it pass through the
currently-installed system:

# emerge lafilefixer
# lafilefixer --justfixit

This will convert the references to libtool archives to the -llibname
form, which works both with and without them.

Secondly, you can avoid any future requirement for this by sanitising
the newly installed .la files; this can be done either by using the
(currently testing) Portage 2.1.9 series, or by adding the following
snippet to your /etc/portage/bashrc:

post_src_install() {
    lafilefixer "${D}"

(Users of the bashrcng feature can install a specific plugin to do the
job, I don't remember the name of it though, sorry!)

It's a one time process that _will_ save you from more breakage and work
to do in the future, so please bear with us.

Note: removal of .la files altogether from the system is _not_ possible
and _is_ going to break your system. This is why we've got to handle
this process with care and can't simply nuke them entirely. A few
packages (imagemagick, mpg123) actually use the .la files to load their
plugins; the libtool macros to detect libltld also rely on the presence
of $libdir/ (even though it's not really necessary). Plus I
know of at least one package that installs data files with .la extension
even though they are not libtool archives.

Note #2: if you run revdep-rebuild before the above process, it _will_
find you a lot of packages to rebuild, and you'll waste a huge amount of
time running in circles.

At this time it is unclear what the path forward will be, if we either
keep removing .la files from packages, caring about the fact they are
not needed, and causing these disruption for who hasn't gone through the
above-noted process yet, or if we'll be doing a mass-removal and deal
separately with eventual breakage on packages that use them, like those
noted above. Both approaches have advantages and disadvantages and it's
mostly a matter of opinion and taste which one is "better".

We'll be looking forward to make this more widely available knowledge
and we hope to be able to provide a better experience for all of you at
the end of this (bumpy) journey.



Diego Elio Pettenò — “Flameeyes”

If you found a .asc file in this mail and know not what it is,
it's a GnuPG digital signature:


File name MIME type
signature.asc application/pgp-signature