bug-libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#12613: Subordinate libltdl builds convenience library when it should


From: Bob Friesenhahn
Subject: bug#12613: Subordinate libltdl builds convenience library when it should build shared library
Date: Wed, 10 Oct 2012 09:09:33 -0500 (CDT)
User-agent: Alpine 2.01 (GSO 1266 2009-07-14)

On Wed, 10 Oct 2012, Gary V. Vaughan wrote:

Hi Bob,

What revision of Libtool?

The released version 2.4.2.

On Oct 10, 2012, at 9:31 AM, Bob Friesenhahn <address@hidden> wrote:
Ltdl is configured like

LTDL_INIT([convenience nonrecursive])
            ^^^^^^^^^^^

I noticed that all of the libltdl objects are being included into my library at link time and that libltdl symbols are being included my library's .exp exports file. This is in spite of requesting that the libltdl library be built and installed.

It seems that specifying a convenience library in configure.ac takes precedence over specifying an installable (i.e. not-convenience) on the command line. I can't find any documentation to confirm or deny that... when we've decided the precedence, we need to document it.

This same logic used to work as expected (at least from what I remember). I am likely wrong though and perhaps this AIX linkage error (which is another bug) simply drew my attention to the problem.

What I was expecting is that if there is already an installed libltdl and the user has not specified --enable-ltdl-install that the installed libltdl is used. If --enable-ltdl-install is specified then an installable version of libltdl should be built (and used). If libltdl is not installed and the user has not specified --enable-ltdl-install, then it should be built as a convenience library and absorbed into the using application/library.

Does it work the way you expect if you remove the convenience declaration from 
the LTDL_INIT invocation?

A quick test (under OpenIndiana) with

LTDL_INIT([nonrecursive])

reveals that libltdl is still being built as a convenience library when libltdl is already installed and no special configure options were provided. However, the build is correctly using the installed libltdl so there is no harm.

If I then configure with --enable-ltdl-install, I see that libltdl is being built as a shared library but there is a bug in that the dependent software is being told to link with already installed /usr/local/lib/libltdl.la rather than the uninstalled libltdl in the build tree.

If I configure with --enable-ltdl-install --with-included-ltdl then we are back to building a convenience library, with all libltdl symbols added to my program's main library (and exported, evil). In this case it is in spite of an already installed libltdl.

Regardless, I don't see how bundled libltdl could work as hoped if the user forgets to add --enable-ltdl-install to the options. Instead the user might get a successful build, but software which does not run after installation because the libltdl it was linked with is missing.

Bare machines without libltdl are pretty rare these days, and removing libltdl (for testing) might cause the system to to stop functioning normally.

It seems that bundling libltdl is a pox to my package. In spite of supporting libldtl as a convenience library, since its symbols get added to my program's main library (usable by other software) there is a problem since it includes and exports libltdl symbols and might conflict with some libltdl installed later.

It is a bit of a problem that libltdl is not its own stand-alone package and is instead part of libtool. Since it is part of libtool, it is necessary to install autoconf in order to install libtool (and thereby libltdl). If libltdl was to be unbundled from my application, I would not want to have to tell the user that they need to install latest GNU m4, autoconf, and libtool in order to be able to use modules.

Bob
--
Bob Friesenhahn
address@hidden, http://www.simplesystems.org/users/bfriesen/
GraphicsMagick Maintainer,    http://www.GraphicsMagick.org/





reply via email to

[Prev in Thread] Current Thread [Next in Thread]