GNU Libtool
***********

1. In the near future
=====================

1.1. libtool
------------

* Rather than looking up the linker's hardcode characteristics in a
  table of shell code, use objdump or equivalent to probe a test program
  at configure time.

* Eliminate the warnings from autoconf -Wobsolete.

* Hook the various language dependencies into the autoconf _AC_LANG
  framework.

* Work out what to do when the dynamic linker loads needed dependencies.

* We could have an option to hardcode paths into libraries, as well as
  binaries: '... -Wl,-soname -Wl,/tmp/libtest.so.0 ...'.  This is not
  possible on all platforms, and is in part obviated by the ability of
  linking libtool libraries specified with -lname, but it might still
  be desirable.

* Lists of exported symbols should be stored in the pseudo library
  so that the size of lt_preloaded_symbols can be reduced.

* Have some option to tell libtool not to include -L flags that point
  into a certain tree in the dependence list of an installed library.
  For example: -L-$top_builddir would let one link with libtool
  libraries in sibling subdirectories within a project, using the -L
  notation, without getting builddir pathnames ever mentioned in .la
  files that get installed.

* Eric Lemings <elemings@cyberia.lemings.com> writes:
  Because of a growing number of config scripts for packages in GNOME 1.2
  (e.g. glib-config, xml-config, orbit-config. etc), development of GNOME
  2.0 spawned a separate tool called pkg-config that allows all packages
  to use one tool rather than several different scripts to query compile
  flags, link flags, and other configuration data.

  The functionality of pkg-config seems to me to have a lot of overlap
  with the goals of libtool.  I was wondering if anyone had considered
  adding an eighth mode to libtool that just queries the installed
  library for the same information that pkg-config provides.  Since
  most packages that use pkg-config also use libtool, I think this
  would be a good way to reduce maintainer and developer dependencies.

* Have libtoolize install 'install-sh' if a newer version is available,
  and/or Automake is not used.

* Allow to specify linking some dependent libraries statically and some
  dynamically, where possible.

* Improve support for C++ with templates.

* Audit file listing in libtool.m4.

* Fix deplibs_check_method=pass_all (which is wrong!) on GNU/Linux.

* Fix -dlopen "self" on AIX.  Reported by Gary Kumfert <kumfert@llnl.gov>.

* Fix denial of service if using installed 'libtool' on a different mount point
  together with a compiler that does not understand '-c -o'.
  Reported by Marcin Siennicki.

* Look at better -no-undefined support, maybe along the idea of
  [support #103719] for CC.


1.2. libltdl
------------

* Change libltdl interface: add separate functions for function
  pointers.  This will allow porting to systems where function pointers
  are incompatible with data pointer C-wise.

* Fix the following bugs in libltdl:
 - error reporting of tryall_dlopen():
   if the file actually doesn't exist (stat() fails or it wasn't dlpreopened)
   -> report 'file not found'
   if it cannot be loaded (e.g. due to missing dependencies)
   -> report dlerror
    open question: what error should be reported if all dlloaders fail
    or if a specific module type can only be loaded by one of them, how report its dlerror?
   Also report dlerror() for dlclose and dlsym if available
 - Make sure that the dependency_libs of a dlpreopened module won't be loaded.

 - Fix mdemo failures on mingw.

 - Fix the last memleak.  Reported by Jeff Squyres <jsquyres@lam-mpi.org>.

 - Fix LTDL_CONVENIENCE.  Reported by Bob Friesenhahn
   and Patrick Welche <prlw1@newn.cam.ac.uk>.


1.3. libtoolize
---------------

* Rewrite the func_copy_* functions so that instead of forking 2 tar
  processes per copied file, a list of files to copy is built and all
  files copied with a single pair of tar processes.

* Write test case that adds libtool macros to aclocal.m4.


2. In the future
================

2.1. Documentation
------------------

* Need to finalize the documentation, and give a specification of
  '.la' files so that people can depend on their format.  This would be
  a good thing to put before the maintenance notes.

* Document the installed 'libtool' and its limitations clearly (maybe implement
  --disable-script-install as well).  Or, even better, remove its limitations.

* Platform notes redo.

2.2. test suite
---------------

* We should include tests with reloadable objects in the testsuite.

* Write a test case for linkage with gnu ld scripts (per 2004-08-25 patch
  from Paolo Bonzini).

* Test everything:
    - cross compile
    - dirs with ~
    - multiple input files

2.3. libtool
------------

* Fix cross-compiling.

* Fix threads.

* Support multilibbing.

* If not cross-compiling, have the static flag test run the resulting
  binary to make sure everything works.

* Another form of convenience library is to have undocumented utility
  libraries, where only the shared version is installed.

* We could use libtool object convenience libraries that resolve
  symbols to be included in a libtool archive.  This would require some
  sort of -whole-archive option, as well.

* Currently, convenience libraries (.al) are built from .lo objects,
  except when --disable-shared.  When we can build both shared and
  static libraries, we should probably create a .al out of .lo objects
  and also a .a out of .o objects.  The .al would only be used to create
  shared libraries, whereas the .a would be used for creating static
  libraries and programs.  We could also explicitly support 'empty'
  convenience libraries, that behave as macros that expand to a set of
  -Rs, -Ls and -ls switches.

* Audit use of object names so we can allow '$' not only within
  source file names.  Necessary especially for java.

* We could introduce a mechanism to allow for soname rewriting, to
  ease multi-libc support.  Installers could specify a prefix, suffix or
  sed command to modify the soname, and libtool would create the
  corresponding link.  This would allow for rebuilding a library with
  the same version number, but depending on different versions of libc,
  for example.  In the future, we might even have an option to encode
  the sonames of all dependencies of a library into its soname.

* Look again at a binary C libtool, or byte-compiled libtool to improve
  speed.

* Generate some "platform specific" shell functions with config.status,
  for example, there is no need to have the C source code for the
  wrapper script on non-windows platforms, this will make the generated
  libtool script smaller and easier to follow, maybe a little faster
  too?

* Audit the GCJ tag section in libtool.m4.

* Add caching mechanism.  Look at 'libtool-cache' from Robert Ögren.


2.4. libtool autoconf macros
----------------------------

* Sort out the macro mess in libtool.m4.  We've started this already
  by refactoring chunks into separate files, but I never did completely
  untangle the mess of macros imported from ltconfig.

* The definitions for LT_SYS_MODULE_EXT, LT_SYS_MODULE_PATH and
  LT_SYS_DLSEARCH_PATH  should not rely on the _LT_SYS_DYNAMIC_LINKER
  macro.  This involves moving the code that sets the variables
  library_names_spec, shlibpath_var and sys_lib_dlsearch_path_spec from
  into a separate macro, and AC_REQUIRING the newly extracted macro in the
  respective ltdl.m4 macros.

2.5. libtool automake integration
---------------------------------

* Unify locks between libtool and compile.

* Fix relinking.

2.6. libltdl
------------

* Finish the rewrite of the core libltdl.  The loaders are fine, and
  the outlying code is now good.  Ralf is starting to pick away at a lot
  of the remaining nasties already, but the code for finding .la/.so files
  and reading/loading them could use a lot more improvement.

* I think we could factor out a little path management support module
  from existing libltdl.  This would be useful for M4 at least -- keeping
  track of FOO_PATH environment contents, searching for files in paths
  etc.

* Try to find a work-around for -[all-]static and libltdl on platforms
  that will fail to find dlopening functions in this case.  Maybe
  creating an alternate libltdl that provides only for dlpreopening, or
  creating an additional static library to provide dummy implementations
  of the functions that can't be linked statically.  This could hardly
  be made completely transparent, though.

* In conjunction with above, fix the failures on *BSD when linked to
  static libc.  Reported by Guilhem Lavaux <guilhem@kaffe.org>.

* Add i18n strings to libltdl, ensuring that package developers can
  ignore any i18n when they libtoolize.

2.7. win32 support
------------------

* Arrange that EXEEXT suffixes are stripped from wrapper script names
  only when needed, and that a timestamp file or a wrapper program is
  created with the EXEEXT suffix, so that 'make' doesn't build it every
  time.

* Figure out how to use data items in dlls with win32.
  The difficult part is compiling each object that will be linked with an
  import lib differently than if it will be linked with a static lib.  This
  will almost definitely require that automake pass some hints about linkage
  in to each object compilation line.

* jeffdb@goodnet.com writes:
  all you need to do for mutually dependent .dll's is to create an implib from
  a .def file so it appears that we might need to detect and handle mutual
  dependencies specially on win32 =(O|

* QoI for file name and path conversion functions. Currently, these are
  implemented as MxN different functions; this has quadratic complexity. If
  possible, it would be preferred to implement then as M+N functions.  However:
    http://lists.gnu.org/archive/html/libtool-patches/2010-08/msg00224.html
    The main issue is you don't know what the "native" (e.g. "central")
    path-type is; e.g. "from-X (to what?)" and "(from what?) to-Y". Right
    now there are only four "platforms" involved: *nix, mingw, msys, and
    cygwin.  That's actually the break-even point, given the vagaries and
    optimizations involved in these particular four platforms.

    We have exactly five basic file name conversion functions (not counting
    the wrappers that handle paths). For a non-quadratic M+N (from-X|to-Y)
    solution, we'd need, I think, the same number of conversion functions: brute
    force suggests nine (four to_*, four from_*, plus the noop), but then many
    of the from_* and to_* would actually BE noop.

    I'm assuming here that the "central" path-type is implicitly some sort of
    unixish -- maybe cyg, maybe msys, maybe unix -- path-type.  The issue is
    that each of the five conversion functions use a different TOOL to perform
    the conversion, with different syntax.  So, trying to combine, e.g.
      msys_to_mingw
      cygwin_to_mingw
      unix_to_mingw
    into an all-encompassing "central_unixish_to_mingw" would require additional
    m4 magic to basically replace the guts depending on whether $build was msys,
    cygwin, or unix.  Worse, you can't really do a set of
    {msys|cygwin|unix}_to_central_unixish that isn't simply a no-op -- because
    (A) they already are all unixish, and (B) what tool would you use? How would
    the later to_mingw function "know" how to convert this new representation to
    mingw.  So, {msys|cygwin|unix}_to_central_unixish would simply be a no-op
    and central_unixish_to_mingw would still do all the work (with its guts
    customized based on $build).

    For more reasonable cross environments (e.g. linux-gnu->some_embedded) I
    think you could probably work out a general M+N scheme, since most embedded
    $hosts aren't as strange as the win32 variants -- even VxWorks and INTEGRITY
    have basic, unix-like file systems (although INTEGRITY does have multiple
    roots). Aggressive use of the m4 function_replace machinery WOULD be
    appropriate for /these/ conversion functions.  OTOH...(a) you can't run the
    $host apps on $build anyway, in these embedded situations. At best you'd use
    $TARGETSHELL and "run" them via a remote connection, and (b) they don't use
    the C wrapper!

    So...I don't think it makes much difference *right now* in the amount of
    code required, or the number of functions implemented. At some point in the
    future we might want to generalize to an M+N scheme.  For the existing win32
    $hosts, all of the functionality would be on "one side" of the 2-step
    conversion; the "other side" would be noop.  But we won't worry about the
    implicit quadratic complexity of the existing scheme for now.

3. Wish List
============

* Maybe implement full support for other orthogonal library types
  (libhello_g, libhello_p, 64 vs 32-bit ABI's, etc).  Make these types
  configurable.

* Perhaps the use of libltdl could be made cleaner by allowing
  registration of hook functions to call at various points.  This would
  hopefully free the user from having to maintain a parallel module
  list with user data.  This would likely involve being able to carry
  additional per user module data in the lt_dlmodule structure -- perhaps
  in the form of an associative array keyed by user name?

* Figure out how to make pkg-config aware of the information libtool
  knows about libraries and their dependencies, and send a patch.

* Generate a libtool.m4 from a bunch of individual files, one per
  platform, to make the job of a "platform maintainer" easier and make
  it easier to add new platforms.

-- 
  Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2024 Free Software
  Foundation, Inc.
  Written by Gary V. Vaughan, 2004

  This file is part of GNU Libtool.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.  This file is offered as-is,
without warranty of any kind.

Local Variables:
mode: text
fill-column: 72
End:
