NEWS - list of user-visible changes between releases of GNU Libtool

New in 1.4f: 2002-??-??; CVS version 1.4e, Libtool team:
* Support auto-import patch to binutils on cygwin for much improved dll
  support.
* Bug fixes.

New in 1.4d: 2002-01-07; CVS version 1.4c, Libtool team:
* Help strings display correctly again.
* Better error messages when library linking fails.
* Better error messages from libltdl when loading fails.
* Better search path management in libltdl with `lt_dlinsertsearchdir' call.
* Support /lib/w32api in recent cygwin releases.
* Support cross compilation to mingw.
* Support for .rc files (Windows resource compiler).
* Improved handling of mingw gcc.
* Improved handling of $PATH with entries containing spaces.
* Improved support for linking with gcc on aix4* and aix5*.
* Improved support for GCC 3.0.
* Initial support for QNX RTOS, UnixWare 7 and OpenUNIX 8.
* Bug fixes to the OpenBSD port.
* Bug fixes.

New in 1.4b: 2001-07-09; CVS version 1.4a, Libtool team:
* Now bootstraps with autoconf-2.50 and automake-1.4-p4.
* Always try to build at least a static lib, even if both static and
  shared libs were disabled.
* Full support for C++ compiler.
* Support for GNU gcj compiler.
* libltdl can now load all modules in a given path according to user
  supplied criteria with `lt_dlforeachfile' call.
* Improved support for AIX ia64, djgpp, HPUX, hurd, OpenBSD, sco3.2*.
* Internal mutex handling no longer has namespace clashes on NCR MP-RAS.
* New pdemo and tagdemo tests.
* Bug fixes.

New in 1.4.1: 2001-??-??; CVS version 1.4.0a, Libtool team:
* Don't leave here-doc files behind.

New in 1.4: 2001-04-25; CVS version 1.3e, Libtool team:
* Support for aix5*.
* Bugfixes.

New in 1.3d: 2001-04-02; CVS version 1.3c, Libtool team:
* ltconfig is no more.  Generation of libtool happens directly from
  the configure file.
* Multithread safe with lt_dlmutex_register callback registration.
* New -no-install flag to avoid the use of executable wrapper scripts.
* New --with-pic, -prefer-pic and -prefer-non-pic flags to control
  the generation of PIC/non-PIC code.
* Support for hardcoding run-time paths (-R) into libraries.
* Support -dlopen and -dlpreopen for libraries.
* Libtool now allows you to link shared libraries against static code.
* New functions in libltdl:
  lt_dlgetinfo, lt_dlhandle_next and lt_dlforeach provide access to module
  specific data in handles.
  lt_dlcaller_register, lt_dlcaller_set_data and lt_dlcaller_get_data provide
  management for user storage of per module data.
  lt_dlloader_next, lt_dlloader_name, lt_dlloader_find, lt_dlloader_add and
  lt_dlloader_remove can be used for adding new types of module loaders.
  lt_dladderror, lt_dlseterror integrate user module loaders with lt_dlerror.
* "-Xcompiler" and "-Wc," does now work in compile mode, too.
* Support recent dlltool formats.
* Start of support code for cross-compiling to win32.
* libltdl can now be built as a dll with win32.
* m4 macros needed to configure libltdl split out into libltdl/ltdl.m4.
* New port to NEWS-OS Release 6.
* Improved support for darwin (rhapsody), mingw32, NetBSD, Compaq Tru64 V5.0
  and Digital Unix V4.*.
* Initial support for ia64 linux.
* Initial support for a.out freebsd shared libs.
* Initial support for Paul Sokolovsky's pw32 POSIX over win32 layer.
* Many bugfixes (especially in libltdl)

New in 1.3b: 1999-07-02; CVS version 1.3a, Libtool team:
* Complete inter-library dependencies support. It's now possible
  to link libtool libraries against other libtool libraries.
* Libtool is able to find already-installed libtool libraries,
  even if they were moved out of their installation directory.
* New "-Wc,flag" and "-Xcompiler flag" flags to pass flags
  directly to the compiler
* New "-Wl,flag" and "-Xlinker flag" flags to pass flags
  directly to the linker
* New "-no-fast-install" flag to selectively disable fast-install mode.
* Support for installing stripped libraries using GNU strip (install -s).
  Automake >= 1.5 will install stripped libraries with "make install-strip".
* Allow linking shared libraries against static ones
  on FreeBSD, GNU/Linux, GNU Hurd and Solaris
* Support for linking DLLs on Win32
* New `clean' mode to delete uninstalled files.
* New demos and tests
* Various bugfixes

New in 1.3.5: 2000-05-27, CVS version 1.3.4a, Libtool team:
* Support for mac OS X (rhapsody).
* Support for *-sequent-sysv4.
* Support for Cygwin-1.1.0.
* Support recent dlltool formats.
* Bugfixes.

New in 1.3.4: 1999-12-08, CVS version 1.3.3a, Libtool team:
* Support for Compaq Tru64 V5.0.
* Improved support for Digital Unix V4.*.
* Improved support for NetBSD, FreeBSD and Unixware.
* Many fine bugfixes.

New in 1.3.3: 1999-07-02, CVS version 1.3.2a, Libtool team:
* New `-dlpreopen force' flag to ensure that
  lt_preloaded_symbols is always defined.
* Work around self-dlclose bug in FreeBSD 3.1.
* Expand convenience libraries when creating reloadable objects.
* Do not forget to import -L flags of convenience libraries.
* Do not pass -whole-archive or equivalent to symbol extractor.
* Create directory to expand convenience libraries only when needed.
* Improved support for Cygwin, DJGPP and NetBSD
* Various bugfixes

New in 1.3.2: 1999-05-26, CVS version 1.3.1a, Libtool team:
* Avoid circular links of objects and libraries.
* Look for dlerror when dlopen was found in -ldl (typo).
* Disable shared libraries with broken GNU ld on Solaris.

New in 1.3.1: 1999-05-21, CVS version 1.3.0a, Libtool team:
* Documentation improvements; recommend automake users to insert libtool.m4
  in acinclude.m4
* AC_LIBLTDL_CONVENIENCE and AC_LIBLTDL_INSTALLABLE now set INCLTDL.
* New port to NEC UX/4800.
* cygwin-b20.1 passes all tests.
* Slightly improved BeOS support.
* Many AIX 4.3.2 test failures have gone.
* Pass unknown -L arguments through to the linker (for -LANG:* support).
* Close a security hole with mode 777 directory during libltdl installation.
* Fixed the infamous ``ifelse'' bug in libtool.m4

New in 1.3: 1999-04-29, Libtool team:
* This is just a summary of the changes since 1.2.
  See the news of intermediate alpha releases below for details.
* Support for convenience archives.
* New maintainers.  Anonymous CVS and home page at gnu.org.
* Portable dlopening interface with libltdl, new -module flag.
* Correctly link installed libtool libraries into programs and other
  libtool libraries.  Linking of uninstalled libtool libraries into
  libraries is under development for 1.4.
* Do not drop library dependencies on platforms that allow them.
* Linking with uninstalled libraries no longer picks installed ones by
  mistake.
* Use libraries from the build tree when running uninstalled
  executables (may require double linking).
* Allow developers to optimize for build-tree executions.
* Support -export-symbols-regex for controlled symbol exporting.
* Support -R to hardcode directories in library search paths.
* New ports, demos and tests.  Lots of improvements and bug fixes.

New in CVS version 1.2g, Libtool team:
* AM_PROG_LIBTOOL is smaller and faster
* AC_LIBTL_L_WIN32_DLL is required in configure.in for libtool to
  attempt to build dlls on win32 hosts
* Shared libraries on AmigaOS up to version 4 are now disabled
  since they don't meet libtool's requirements for shared libraries
* -L supports now relative directories
* Libltdl has a new license: LGPL with a special exception
* Libltdl can be used as stand-alone package
* dlopen support for BeOS
* Partial support for Motorola System V 4
* Improved support for AIX, BeOS, Cygwin, DJGPP, DU, IRIX and HP/UX
* Documentation updates
* New tests
* Bugfixes

New in 1.2f: 1999-03-15; CVS version 1.2e, Libtool team:
* libtool will correctly link uninstalled libraries into programs
  and prefer uninstalled libraries to installed ones
* Library paths that are in the system default run-time search path
  are no longer hardcoded into executables.
* New fast installation mode, which links the final executable
  in order to avoid relinking during installation.
  Programs in the build-tree are relinked when executed.
* New AC_DISABLE_FAST_INSTALL macro to set the default for
  the fast-install mode to disabled
* New -export-symbols-regex flag, to export symbols selectively by
  a regular expression
* Support -R for specifying run-time path of programs and library dependencies
* New -avoid-version option to avoid versioning for libraries
* libtool module names no longer need to have a "lib" prefix
  (requires automake 1.4).
* New -thread-safe flag, to build thread-safe libraries
* Major improvements in libltdl: API documentation, installable version,
  support for module search paths, support for lt_dlopen(0),
  can be embedded into packages as a tar file (libltdl.tar.gz),
  dynamic buffer allocation and buffer overflow checks,
  new macro LTDL_SET_PRELOADED_SYMBOLS() which must be used in the
  main program, dynamic memory allocation functions are user-defineable
* New AC_LIBLTDL_CONVENIENCE and AC_LIBLTDL_INSTALLABLE macros, to select
  convenience and/or installable versions of libltdl.
* libltdl is now built and installed unless --disable-ltdl-install
* New "-dlopen self" flag for dlopening the executable itself
* New AC_LIBTOOL_DLOPEN macro to check for dlopen support,
  required if you use -dlopen or -dlpreopen
* If libtool could not satisfy all dependencies of a module
  it will only build a static version of it
* dld_preloaded_symbols was renamed to lt_preloaded_symbols
* Support for BeOS
* Improved support for FreeBSD, AIX, IRIX, OSF, SysV 4.3, HP/UX, DJGPP
  BSD/OS 4.x and NetBSD
* In order for libtool to attempt to link a shared library (dll) on win32
  platforms, you must pass the -no-undefined flag to libtool in link mode.
* The path to GNU ld now works on cygwin-b18 to cygwin-b20.2 at least.
* Support for IRIX library versioning.
* New demos and tests
* Various bugfixes

New in 1.2d: 1998-12-16; CVS version 1.2c, Libtool team:
* libtool will correctly link already-installed libraries into programs.
* New -module flag, to create loadable modules.
* New libltdl, a small library for portable dlopening of modules.
  It is still undocumented, but you can already find some examples in:
* New mdemo directory, with tests of -module and dlopening examples.
  Be aware that libltdl is only known to work on a few platforms such as
  GNU/Linux and Solaris2.  Some mdemo tests are known to FAIL on several
  other platforms; please ignore these failures by now (or work to fix
  them :-).
* Inter-library dependencies patch finally integrated, but there's
  still much porting to do.  See PORTING for details (some plans for the
  future in mail/deplibs in the CVS tree).
* New option -export-symbols to control symbol exporting when possible.
* Fixed -export-dynamic problem with C++ programs in egcs 1.1.
* New dlpreopen structure.
* libtool now supports `-c -o' and subdirectories in sources and
  target object names even in platforms whose compilers do not support
  this.  In this case, file locking occurs to avoid problems with
  parallel builds.
* New `echo' variant that should fix most problems with long command
  lines and broken printf programs.
* Support for DG/UX, UnixWare 7.x and FreeBSD 3.0, and improved
  support for Microsoft Windows
* Various bugfixes
* We now have anonymous CVS access to GNU libtool.  CVSROOT is
  :pserver:anoncvs@anoncvs.gnu.org:/gd/gnu/anoncvsroot.  The password
  is empty.  The directory is libtool.  Check our home-page at
  http://www.gnu.org/software/libtool/libtool.html for details.
* Alexandre Oliva, Thomas Tanner and Gary V. Vaughan have taken over
  the maintenance of libtool.
* Arguments to ltconfig have been changed to allow creation of a
  libtool C program, totally unusable as of this release.

New in 1.2b - 1998-07-01, Gordon Matzigkeit:
* Libtool needs a new maintainer, since Gordon Matzigkeit has quit.
  If you think you can do the job, send mail to bug-libtool@gnu.org.
* Bug fixes.
* Support for libtool convenience archives.

New in 1.2a - 1998-04-19, Gordon Matzigkeit:
* Bug fixes.
* ltconfig accepts an `--output' option to specify the name of the
  generated libtool.
* New `--debug' flag to turn on shell script tracing for libtool,
  libtoolize, and ltconfig.
* Added `libtool --config' to print out all configuration variables.
* Support for *-*-hpux11*.

New in 1.2 - 1998-03-20, Gordon Matzigkeit:
* Minor bug fixes to provide a stable public release.
* Libtool no longer cseses Solaris printf to barf due to silly
  2110-byte static buffers.

New in 1.1 - 1998-03-08, Gordon Matzigkeit:
* Bug fixes.
* http://www.profitpress.com/libtool/ is libtool's homepage.
* `AM_PROG_LIBTOOL' supports turning shared or static libraries off
  with the `--enable-shared=PKGS' and `--enable-static=PKGS' configure
  flags.  See (libtool)AM_PROG_LIBTOOL.
* Use the `AM_DISABLE_SHARED' or `AM_DISABLE_STATIC' macros if you
  wish to modify the default behaviour of `AM_PROG_LIBTOOL' for your
  package.
* New rules for `AM_PROG_LD' to use gcc's `-print-prog-name' flag in
  order to find ld, if possible.
* Suppress duplicate compiler output during `compile' mode.
* Deleted `dlname' mode.  Dlopen applications should only use the
  runtime search method described in (libtool)Finding the dlname.
* Experimental support for dynamically loaded modules, even on
  static-only platforms, via new `-dlopen' and `-dlpreopen' link
  flags.
* `compile' mode honours the `-static' flag to prevent libtool
  from building PIC objects.
* New `execute' mode to support debugging uninstalled libtool
  libraries and executables.
* `-allow-undefined' is now the default.  You can use `-no-undefined'
  to declare that a shared library is completely self-contained.
* Inter-library dependencies are automatically handled when linking
  against an uninstalled `.la' file.
* New `-all-static' flag to prevent any dynamic linking.  The regular
  `-static' flag now just prevents dynamic linking of libtool libraries.
* New `-release' flag to encode release numbers into libtool
  libraries.  This breaks binary compatibility, but is useful for
  libraries whose interfaces change very frequently.  See
  (libtool)Versioning.
* The `-rpath' flag can be used to hardcode absolute directories when
  linking executables using libtool.
* New robust quoting code to handle any metacharacters passed in
  arguments to libtool commands.
* Full support for broken collect2 on AIX 3.  Shared libraries
  can now be built with all working versions of GCC on AIX.
* Shell script speed optimizations for old and buggy /bin/sh systems,
  such as HP-UX 9 and SunOS 4.1.4.
* Maybe use `_libs' as a temporary libtool directory instead of `.libs'
  in order to cope with MS-DOS filenames.
* Portability fixes for Windows NT.
* Refuse to create libtool libraries that don't begin with `lib'.
  This allows us to correctly handle OSes that don't have the `lib'
  prefix by default, such as OS/2.
* Support for *-*-amigaos*, *-*-os2*, *-*-sysv4.2uw2*, and *-*-uts4*.

New in 1.0 - 1997-07-08, Gordon Matzigkeit:
* Bug fixes.
* Better configuration test to find the system linker.  The old test
  was failing because people frequently install GNU ld, but don't
  necessarily configure GCC to use it.
* Automake support for Libtool now uses the LTLIBRARIES primary.  See
  the Automake documentation for more information.
* Added new `--disable-static' flag to disable building static
  libraries on platforms that have shared libs.
* New `-allow-undefined' link flag to build shared libs that contain
  references to unresolved symbols.
* Removed all support for creating static-only libraries.
* Basic support for dynamically loaded modules: new `-export-dynamic'
  linking flag and corresponding `dlname' mode.
* New `--features' flag to display configured libtool attributes.
* Added support for installing libtool objects, both in absolute and
  relative directories.
* Support *-*-linux-gnu* as an alias for *-*-linux*.
* Support for *-*-openbsd* and *-*-freebsd3*.

New in 0.9 - 1997-02-03, Gordon Matzigkeit:
* Bug fixes.
* The libtool demo now uses the libm cos(3) function, to demonstrate
  inter-library dependencies.
* The PLATFORMS file has been moved to doc/platforms.texi.

New in 0.8 - 1997-01-26, Gordon Matzigkeit:
* Bug fixes, and more documentation.
* Basic support for other language compilers (C++, Fortran, and
  preprocessed assembler).
* Libtool is now more persistent when linking with the `-static'
  flag fails.
* New test for hardcoding system linkers, to verify that libtool
  neither creates incorrect binaries, nor takes unnecessary
  precautions while linking against uninstalled shared libraries.
* For clarity, the demo subdirectory no longer uses ansi2knr, and has
  been rewritten to avoid ANSI-only constructs.
* Support for *-*-irix5, *-*-irix6*, and *-*-sco3.2v5*.

New in 0.7 - 1996-12-08, Gordon Matzigkeit:
* Total rewrite of libtool, along with a new model for library building.
* Completely rewritten documentation for the new paradigm.
* Sane handling of broken system linkers, such as the ones on AIX
  and HP-UX.
* configure mode is now a separate program, `ltconfig'
* The libinfo helper script has been incorporated into the main
  libtool program.
* Automatic mode guessing, based on the command line.
* Full support for Automake 1.2 (including ansi2knr features).
* Support to create reloadable objects using link mode.
* Support for new `-static' linking flag.
* Support for stripping libraries during installation.
* Library version information is now passed on the command line, not
  through a version file.

Version 0.6 was never released.

New in 0.5:
* Disabled install-progs until next version, when it will be correctly
  implemented.
* Clearer library versioning documentation.  See (libtool)Versioning.
* Renamed gm_PROG_LIBTOOL to AM_PROG_LIBTOOL
* Libtool now creates pseudo-objects named foo.lo and pseudo-archives named
  libfoo.la instead of foo.o and libfoo.a.  See the documentation.
* libtool compile doesn't interfere with user CFLAGS if they don't
  conflict with the current objtype.  From Karl Berry.
* Created new libinfo helper script.
* libversion.in files are obsolete -- libtool uses libinfo to read the
  new LIBINFO files.
* Libtool is better at finding its config file and helper scripts.
* Support for *-*-gnu*

New in 0.4:
* Bug fixes and new regression tests
* On unsupported configurations, ``libtool configure'' demotes OBJTYPES to
  `standard' instead of aborting
* Added new object type, `t', for tcov(1) support
* Support for *-*-aix3*, *-*-aix4*, *-*-hpux10*, *-*-osf3*, and *-*-solaris2*

New in 0.3:
* Bug fixes and new regression tests
* Added new uninstall-libs mode
* Added a host argument to configure mode
* Fixed debugging/hyper-optimizing flags conflict (from Karl Berry)
* Support for --no-whole-archive when needed by GNU ld (from Ulrich Drepper)
* Implementation of --enable-linktype, --enable-profile, --enable-shared,
  --enable-static in gm_PROG_LIBTOOL macro
* New `libtoolize' program (modeled after GNU gettext's `gettextize') to help
  conversion to libtool
* New ABOUT-LIBS document for inclusion with libtool-supported packages

New in 0.2:
* Support for *-*-linux
* Better checking for GNU ld
* Reimplemented the config file so that it corresponds more closely to the
  variables listed in (libtool)Porting Libtool.
* Reimplemented the shared library version scheme.  See (libtool)Versioning.
* Replaced `--config-file' and `--version-file' options with `--confdir'
* Added new install-libs and install-progs modes

New in 0.1:
* First release of libtool
* Support for: *-*-freebsd*, *-*-netbsd*, *-*-sunos4*, *-*-ultrix4*
