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

* Noteworthy changes in release ?.? (????-??-??) [?]


* Noteworthy changes in release 2.6.2 (2026-07-16) [stable]

  Please see beta release 2.6.1 and alpha release 2.6.0 for a list of
  release changes.


* Noteworthy changes in release 2.6.1 (2026-06-04) [beta]

** New features:

  - Pass 'resource-dir=*' flag for Clang.

  - Recognise explicit shared library arguments when linking dependency
    libraries to a shared library, like exists when linking a program.

  - Support OpenMP with macOS clang by processing '-Xpreprocessor
    -fopenmp' as one token.

** Bug fixes:

  - Store cygpath file path conversions correctly for MSYS2 and MSVC.

  - Fix syntax error in LT_PROG_OBJC and LT_PROG_OBJCXX.

  - Separate Objective C and C++ cache check for proper tagging support.

  - Fix in darwin to support values with spaces.

  - Limit the length of DLL name to 8.3 correctly to avoid corrupting a
    generated DLL on OS/2.

  - Remove unused variable on OS/2, which could cause issues with static
    library generation if defined.

  - Recognise more static linking options for Clang.

  - Fix emscripten CXX postdeps using non-PIC sysroot.

  - Avoid deprecated option '-o' with MSVC compilers and replace with '-Fe'.

  - Avoid overlinking of dependency libraries on ELF systems.

  - Ensure old libraries are not archived.

** Changes in supported systems or compilers:

  - Add support for SlimCC compiler.

  - Add support for *-ironclad-gnu.


* Noteworthy changes in release 2.6.0 (2025-09-18) [alpha]

** New features:

  - Add a new tool, libtool-next-version, to guide users through updating
    library versions.

  - Add tagging for Objective-C and Objective-C++, OBJC and OBJCXX.

  - Increase 5 digit limit on revision value for libraries to 19 digits,
    which is referencing Unix epoch time in nanoseconds.

  - Add configuration options to choose whether to use '-nostdlib' to let
    the compiler frontend decide what standard libraries to link when
    building C++ shared libraries and modules, --enable-cxx-stdlib and
    --disable-cxx-stdlib.

  - Allow statically linking GCC and Clang compiler support libraries
    into shared libraries.

  - Add linking clang_rt static archives compiler internal libraries by
    their absolute path.

  - Set 'mklink' as the symlinking tool for MSVC.

  - Pass '--target' architecture flag for Clang.

  - Support MSYS and MSYS2 file path conversions.

** Bug fixes:

  - Fix wrongly deduplicated compiler dependencies on linux.

  - Fix NetBSD postdeps for shared libraries.

  - Fix statically linking dependencies into shared C++ libraries when
    utilizing clang builtins or g++ options like, -static-libstdc++, by
    using a new configuration option, --enable-cxx-stdlib.

  - Ensure *-linux-mlibc host matches to mlibc userland rather than
    matching to GNU/Linux and similar userlands.

  - Fix hang with cmd.exe in MSYS.

  - For MSVC, fix mishandling compiler flags, symlinking, cl.exe '.exp'
    extension collision, symbol names, and numerous testsuite bugs.

  - Fix undeclared reference to access on Windows in libltdl.

  - Fix flang -Wl flags on FreeBSD.

  - Fix reordering '--as-needed' flag.

  - Fix libltdl early failures for multi-arch.

** Changes in supported systems or compilers:

  - Support additional Intel OneAPI compilers, 'icx', 'icpx', and 'ifx'.

  - Support ML64 (Microsoft Macro Assembler).


* Noteworthy changes in release 2.5.4 (2024-11-20) [stable]

** New features:

  - New libtool command line flag, --no-finish, to skip executing
    finish_cmds that would alter the shared library cache during testing.

  - New libtool command line flag, --reorder-cache=DIRS, to reorder the
    shared library cache, only on OpenBSD.

** Bug fixes:

  - Fix incorrect use of workarounds designed for Darwin versions that
    don't have -single_module support.

  - Fix errors when executing 'make distclean' and 'make maintainer-clean'.

  - Fix bug where the constructed rpath omit directories, instead of
    appending them to the end.

  - Fix configure error for when variable 'multlib' is unset.

  - Fix searching for -L in link paths being over-greedy and incorrectly
    handling paths with -L in them.

  - Avoid using AC_TRY_EVAL macro, "dangerous and undocumented".

  - Fix linking libraries at runtime with tcc by adding run path.

  - Fix path comparison by removing trailing slashes on install commands.

  - Fix linking for mingw with lld by prefering response files over the
    linker script.

  - Fix '-Fe' usage with linking in MSVC.

  - Fix '--no-warnings' flag.

  - Fix handling xlc(1)-specific options.

  - Fix Haiku support.

** Changes in supported systems or compilers:

  - Support additional flang-based compilers, 'f18' and 'f95'.

  - Support for 'netbsdelf*-gnu'.

  - Support for '*-mlibc', and subsequently Ironclad and Managarm.

  - Support for SerenityOS.

  - Support for wasm32-emscripten.

* Noteworthy changes in release 2.5.3 (2024-09-25) [stable]

** New features:

  - Add 'aarch64' support to the file magic test, which allows for
    shared libraries to be built with Mingw for aarch64.

** Bug fixes:

  - The configure options --with-pic and --without-pic have been renamed
    to --enable-pic and --disable-pic, respectively.  The old names
    --with-pic and --without-pic are still supported, though, for
    backward compatibility.

  - The configure option --with-aix-soname has been renamed to
    --enable-aix-soname.  The old name --with-aix-soname is still
    supported, though, for backward compatibility.

  - Fix conflicting warnings about AC_PROG_RANLIB.

  - Document situations where -export-symbols does not work.

  - Update FSF office address with URL in each file's license block.

  - Add checks for aclocal in standalone.at and subproject.at test files
    that report failures in Linux From Scratch and Darwin builds.


* Noteworthy changes in release 2.5.2 (2024-08-29) [beta]

** Bug fixes:

  - Use shared objects built in source tree instead of the installed
    versions for more reliable testing.

  - Fix test in bug_62343.at for confirmed Cygwin/Mingw32 where the
    incorrect architecture version of a compiler was generating
    object files that could not be linked with a library file.

  - Fix typos found with codespell.

** Changes in supported systems or compilers:

  - Add support for 32-bit mode on FreeBSD/powerpc64.


* Noteworthy changes in release 2.5.1 (2024-07-25) [beta]

** New features:

  - Support C++17 compilers in the C++ tests.

  - Add sysroot to library path for cross builds.

** Important incompatible changes:

  - Autoconf 2.64 is required for libtool.m4 to use AS_VAR_APPEND.

** Bug fixes:

  - Fix for uninitialized variable in libtoolize.

  - Skip Fortran/C demo tests when using Clang with fsanitize to
    avoid an incompatible ASan runtime.

  - Updated documentation for testing.

  - Fix failing test to account for program-prefix usage.

  - Replaced a deprecated macro to remove warning messages in the
    testsuite logs.

  - Fix number of arguments for AC_CHECK_PROG call.

  - Fix test failures with no-canonical-prefixes flag by checking
    if the flag is supported first.

  - Fix test failures with no-undefined flag by checking host OS
    before appending the flag.

  - Skip test when passing CXX flags through libtool to avoid test
    failure on NetBSD.

  - Remove texinfo warning for period in node name of pxref.

  - Alter syntax in sed command to fix numerous test failures
    on 64-bit windows/cygwin/mingw.

  - Fix 'Wstrict-prototypes' warnings.

  - Correct DLL Installation Path for mingw multilib builds.

  - Fix '--preserve-dup-deps' stripping duplicates.

  - Disable chained fixups for macOS, since it is not compatible with
    '-undefined dynamic_lookup'.

** Changes in supported systems or compilers:

  - Support additional flang-based compilers, 'flang-new' and 'ftn'.


* Noteworthy changes in release 2.5.0 (2024-05-13) [alpha]

** New features:

  - Pass '-fdiagnostics-color', '-frecord-gcc-switches',
    '-fno-sanitize*', '-Werror', and 'prefix-map' flags.

  - Pass the '-no-canonical-prefixes' linker flag.

  - Pass '-fopenmp=*' for Clang to allow choosing between libgomp and
    libomp.

  - Pass '-shared-libsan', '-static-libsan', 'rtlib=*', and
    'unwindlib=*' for Clang.

  - Expanded process.h inclusion on Windows for more than the
    proprietary MSVC compiler. Other alternative Windows compilers
    also require process.h.

  - Pass 'elf32_x86_64' and 'elf64_x86_64' to the linker on hurd-amd64.

  - Recognize *-*-windows* config triplets.

** Important incompatible changes:

  - Removed test_compile from command line options.

  - By default executables are created with the RUNPATH property for
    the Android linker. RUNPATH works for libraries which are not
    installed in system locations.

  - Removed AC_PROG_SED fallback, as the macro has been supported
    in Autoconf since the 90's.

** Bug fixes:

  - Check for space after -l, -L, and -R linker flags.

  - Updated documentation for tests, the demo directory, and
    elsewhere.

  - Fixed Solaris 11 builds.

  - Clean trailing "/" from sysroot path.

  - Fixed shared library builds for System V.

  - Added mingw to the list of systems not requiring libm.

  - Fixed support for nios2 systems.

  - Fixed linker check for '--whole-archive' support for linkers other
    than ld.

  - Use -Fe instead of -o with MSVC to avoid deprecation warnings.

  - Improved reproducibility of libtool scripts.

  - Avoided MinGW warning by adding CRTIMP.

  - Improved grep portability.

  - Fixed cross-building warnings when checking for file.

** Changes in supported systems or compilers:

  - Removed support for bitrig (*-*-bitrig*).

  - Added support for flang (Fortran LLVM-based) compilers.


* Noteworthy changes in release 2.4.7 (2022-03-16) [stable]

** New features:

  - Libtool script now supports (configure-time and runtime) ARFLAGS
    variable, which obsoletes AR_FLAGS.  This is due to naming conventions
    among other *FLAGS and to be consistent with Automake's ARFLAGS.

  - Gnulib testsuite is enabled and run during 'make check'.

  - Support the Windows version of the Intel C Compiler (icl) in
    libtool script.

  - Pass '-fsanitize=*' flags for GCC and LLVM, and '-specs=*' for GCC
    to linker.

  - Pass '-Xassembler=*' and '-Wa,*' flag to compilers and linkers.

  - The variable 'FILECMD' with default value of '/usr/bin/file' was used to
    replace existing hard coded references to '/usr/bin/file'.

  - Add MidnightBSD support.

** Important incompatible changes:

  - Libtool changed ARFLAGS/AR_FLAGS default from 'cru' to 'cr'.

  - Do not pass '-pthread' to Solaris linker.

  - 'libtool' and 'libtoolize' scripts now use '#! /usr/bin/env sh' shebang.
    Previously '#! /bin/sh' was used, which presents challenges for
    containerized environments.

** Bug fixes:

  - Fix significant slowdown of libtoolize for certain projects (regression
    introduced in 2.4.3 release) caused by infinite m4 macro recursion.

  - Mitigate the slowdown of libtool script (introduced in v2.4.3) caused by
    increased number of calls to '$SED $sed_quote_subst' (bug#20006).

  - Properly parse and export TLS symbols on AIX.

  - Various bug fixes surrounding use of 'sed'.

  - Darwin systems set proper "allow undefined" flag on OSX 11, and
    PowerPC 10.5.

  - Removed some deprecated tests related to 'Makefile.inc' files.

* Noteworthy changes in release 2.4.6 (2015-02-15) [stable]

** New features:

  - LT_SYS_LIBRARY_PATH can be set in config.site, or at configure time
    and persists correctly in the generated libtool script.

** Bug fixes:

  - Fix a race condition in ltdl dryrun test that would cause spurious
    random failures of that test.

  - LT_SYS_DLSEARCH_PATH is munged correctly.


* Noteworthy changes in release 2.4.5 (2015-01-19) [stable]

** New features:

  - Libtoolize searches for the best available M4 on the user PATH at
    runtime, rather than settling for the first one found.

  - Support munging sys_lib_dlsearch_path_spec with LT_SYS_LIBRARY_PATH
    environment variable.

** Bug fixes:

  - Bail out at configure time if the installed M4 is not sufficient
    for the purposes of libtoolize.

  - freebsd-elf library versioning was upgraded incorrectly in 2.4.4,
    but now works properly again.

  - Fix a 2.4.4 regression so that libltdl subprojects do not warn
    about missing libltdl/libltdl directory as in prior releases.

  - When using Sun C++ on Solaris or GNU/Linux we used to set libtool's
    postdeps permanently, based on the contents of $CXX and $CXXFLAGS at
    configure time, which was brittle and error-prone.  Now, we no
    longer check for a SunCC ABI at configure time, but augment the
    postdeps at libtool time based on the current invocation flags on
    each call.

** Changes in supported systems or compilers:

  - /usr/local prefixed rpaths are now added to the link-line on
    ia64-hp-hpux*, because the default system runtime loader path does
    not contain them.

  - Previously, when using Sun C++ on Solaris or GNU/Linux, `-Cstd -Crun`
    flags were added to $postdeps unless CXX or CXXFLAGS contained
    `-library=stlport4`.  Newer releases have added other compiler flags
    that are also incompatible with `-Cstd -Crun`, so now we don't add
    them if any of `-std=c++[0-9][0-9]`, `-library=stdcxx4` or
    `-compat=g` were found in CXX or CXXFLAGS when the Sun C++ compiler
    is detected.


* Noteworthy changes in release 2.4.4 (2014-11-29) [stable]

** New features:

  - Libltdl maintains its own fork of argz, with macros and files in
    the LT_ and lt__ namespaces (resp.) where they cannot clash with
    client projects' use of gnulib argz.

** Bug fixes:

  - Installation of 'libtoolize' once again obeys '--program-prefix',
    '--program-suffix' and '--program-transform-name' configure options.

  - `libtoolize` doesn't remove any files that it can't reinstall,
    including old versions of the snippet directory, and gnulib's
    version of the argz module and supporting files.

  - LT_FUNC_DLYSM_USCORE now works correctly on systems that don't
    support self dlopen()ing.

** Important incompatible changes:

  - LT_LIB_DLLOAD no longer prepends -ldl or -ldld to LIBS, causing
    duplicate occurrences in libltdl link lines.  If you need to
    add a library for dlopen() or shl_load() in your Makefile, then
    use $(LIBADD_DLOPEN) or $(LIBADD_SHL_LOAD) respectively.  If you
    are using libltdl, this all happens automatically, and the only
    difference you'll see is no more duplicated library names in the
    verbose link line.

** Changes in supported systems or compilers:

  - Preliminary support for tcc on linux*.  Although it already worked
    sometimes in previous releases, making sure to set LD correctly now
    avoids mis-matching GNU ld with tcc:

       ./configure CC=tcc LD=tcc

  - Added -os2dllname option to work around 8 character base name
    limit on OS/2.  The option has no effect on other systems.

  - Support for DLL versioning, -export-symbols and -export-symbols-regex
    on OS/2.

  - Support filename-based shared library versioning on AIX. See manual
    for details.


* Noteworthy changes in release 2.4.3 (2014-10-27) [stable]

** New features:

  - Moved to gnulib release infrastructure.

  - M4 is now used for scanning the M4 macros in your configure.ac that
   'libtoolize' looks at to determine what files you want, and where you
    would like them installed.  This means that you can compose your
    version number or any other argument that Libtoolize needs to know at
    M4 time using git-version-gen from gnulib, for example.

  - Invoking 'libtoolize --ltdl' no longer maintains a separate autoconf
    macro directory in the libltdl tree, but automatically adjusts the
    installed libltdl configuration files to share whatever macro
    directory is declared by the parent project. (Note: if you were
    already sharing a macro directory with AC_CONFIG_MACRO_DIR(ltdl/m4)
    or similar, that still works as does any other directory choice).

  - Invoking 'libtoolize --ltdl' no longer maintains a separate auxiliary
    scripts directory in the libltdl tree, but automatically adjusts the
    installed libltdl configuration files to share whatever auxiliary
    scripts directory is declared by the parent project. (Note: if you
    were already sharing an auxiliary directory with subproject libltdl
    using AC_CONFIG_AUX_DIR(ltdl/config) or similar, that still works as
    does any other directory choice).

  - The legacy tests have all been migrated to the Autotest harness.

  - The Autotest testsuite can be run without the especially time consuming
    tests with:

        make check-local TESTSUITEFLAGS='-k "!expensive"'

** Bug fixes:

  - Fix a long-standing latent bug in autom4te include path for autotests
    with VPATH builds.
  - Fix a long-standing latent bug in libtoolize that could delete lines
    from libltdl/Makefile.am in recursive mode due to underquoting in a
    sed script.
  - Fix a long-standing bug in libtoolize, by outputting the 'putting
    auxiliary files in' header with 'libtoolize --ltdl --subproject'.
  - Fix a long-standing bug in libtoolize subproject installation, by not
    installing a set of autoconf macro files into the parent project if
    there is no configure.ac present to use them.
  - The libtoolize subproject mode selector is now named '--subproject'
    and is equivalent to the implied '--subproject' mode when no other
    mode is selected; '--standalone' never worked, and is no longer
    accepted.
  - Libtool and libtoolize no longer choke on paths with a comma in them.
  - In the case where $SHELL does not have the same enhanced features
    (e.g. the ability to parse 'var+=append') as $CONFIG_SHELL, libtool
    will now correctly fallback to using only vanilla shell features
    instead of failing with a parse at startup.
  - Correctly recognize import libraries when Microsoft dumpbin is used
    as the name lister and extend the dumpbin wrapper to find symbols
    in import libraries using the -headers option of dumpbin. Also fix a
    bug in the dumpbin wrapper that could lead to broken symbol listings
    in some corner cases.
  - Use the improved Microsoft dumpbin support to mend preloading of
    import libraries for Microsoft Visual C/C++.
  - No longer mangle module-definition (.def) files when feeding them to
    the Microsoft Visual C/C++ linker via the -export-symbols argument to
    the libtool script, thus matching how .def files are handled when
    using GNU tools.
  - Recognize more variants (e.g. those starting with a LIBRARY statement)
    of module-definitions (.def) files when using them instead of a raw
    list of symbols to export.
  - Fix a long-standing bug when using libtoolize without automake; we
    no longer remove install-sh with --force, since it's not a file
    libtoolize will reinstall without --install..

** Important incompatible changes:

  - GNU M4 is required to run libtoolize in a directory with a
    'configure.ac' (or 'configure.in') that needs tracing to determine
    what modes and directories have been specified.

  - The use of the idiosyncratically named 'Makefile.inc' in nonrecursive
    libltdl builds is deprecated, although it will be supported for one
    more year or until the next release, whichever takes longer.  Please
    upgrade to the more standard naming of 'ltdl.mk' in keeping with other
    GNU projects.

  - libtoolize now behaves consistenty in respect of multiple directory
    arguments to ACLOCAL_AMFLAGS and multiple invocations of AC_CONFIG-
    _MACRO_DIRS, where the first directory is always selected.  Previous
    releases took the first ACLOCAL_AMFLAGS argument, but the last
    invocation of AC_CONFIG_MACRO_DIRS.

  - The libtoolize program now advises use of the new Autoconf
    AC_CONFIG_MACRO_DIRS declaration.  If you follow that advice, all
    your developers will need at least autoconf-2.70 and automake-1.13
    to rebootstrap your probject.  If you still need to support
    bootstrap with older Autotools, then you should add the following
    to your configure.ac file:

        m4_ifndef([AC_CONFIG_MACRO_DIRS],
            [m4_define([AC_CONFIG_MACRO_DIRS],
                m4_defn([AC_CONFIG_MACRO_DIR]))])

  - Overhead of probing for a non-backslash crippled echo equivalent
    during initialization of every script has been removed in favor of
    trusting that "printf %s\n" works out of the box on all non-museum
    host architectures.  Manually setting ECHO appropriately in the
    build environment will be necessary on some ancient architectures.

** Changes in supported systems or compilers:

  - Support for bitrig (*-*-bitrig*).

  - Solaris 7 and earlier requires ECHO=/usr/ucb/echo in the build
    environment, to build and use libtool.

New in 2.4.2 2011-10-17: git version 2.4.1a, Libtool team:

* New features:

  - The --with-pic configure option now supports a list of comma-separated
    package names.  This can be used to build some static libraries with PIC
    objects while building others with non-PIC objects.

  - Initial support for Go, using the gccgo compiler.

  - On Mac OS X .dylib is now tried as well as .so with
    lt_dlopenext().

* Bug fixes:

  - The generic approximation of the command line length limit (when getconf is
    not available) works again.  Regression introduced in v2.2.6-39-g9c3d4d8.
  - The bug that leaked developer tool paths into the release tarballs
    from ./bootstrap is fixed.
  - Improved support for the Cuda Compiler Driver (nvcc) on Darwin.
  - For GCC LTO support, the -fuse-linker-plugin switch is now also removed
    when computing compiler postdeps.

* Important incompatible changes:

  - The undocumented hardcode_libdir_flag_spec_ld tag variable has been
    removed in favor of using hardcode_libdir_flag_spec with $wl set to empty.

* Changes in supported systems or compilers:

  - Fixes for gfortran on Darwin, XL Fortran on GNU/Linux.
  - Support for FreeBSD 1.x (outdated since 1994) has been removed.

New in 2.4 2010-09-22: git version 2.2.11a, Libtool team:

* New features:

  - Sysroot support.  This allows you to build cross-compiled packages
    with the same prefix that will be used on the destination machine,
    and still find dependent libraries under the compiler's "sysroot".
    Without sysroot support, paths internal to the build system may leak
    into the product of the build.

    Sysroot support is disabled unless the --with-sysroot configure
    option is passed to configure, because .la files generated with
    sysroot support will _not_ be usable in general with older Libtools.

  - On non-cygwin Windows systems, we now lookup potential library
    file names without regard to file name case.
  - The old testsuite now uses the 'parallel-tests' Automake test driver
    now for more concurrency and better test logging.  For this, tests are
    run in verbose mode by default now.

* Important incompatible changes:

  - Autoconf 2.62 and Automake 1.11.1 or newer are now required for
    bootstrapping Libtool.  For using Libtool in your own projects,
    Autoconf 2.59 and Automake 1.9.6 should still work.
  - The fix_srcfile_path variable has been replaced by a more thorough
    mechanism triggered by the to_tool_file_cmd variable.

* Changes in supported systems or compilers:

  - Initial support for the Microsoft C/C++ Compiler, with help from
    the compile script in unreleased Automake 1.12. Override the manifest
    tool used to embed the manifest resource through the environment
    variable MANIFEST_TOOL. Please note that the import library naming
    has changed (from foo-2.lib to foo.dll.lib) from when the code lived
    in its own git branch.
  - Initial support for the NAG Fortran compiler on GNU/Linux.

* Bug fixes:

  - The 'check-interactive' and 'check-noninteractive' convenience make
    targets now also work for the old testsuite.
  - Warnings from Autoconf v2.67-36-g1e604ec about incomplete programs
    passed to AC_*_IFELSE tests have been fixed.
  - On IRIX, the test for -Wl,-exported_symbol now also works with gfortran.

New in 2.2.10 2010-06-10: git version 2.2.9a, Libtool team:

* New features:

  - On non-cygwin Windows systems, we no longer try to lookup the POSIX
    format path recorded in $libdir of a pseudo-library when looking up
    the location of the library with the native tools.

New in 2.2.8 2010-06-05: git version 2.2.7c, Libtool team:

* No new features:

  - Bumped version number and promoted 2.2.7b release candidate to a full
    stable release.

New in 2.2.7b 2010-05-20: git version 2.2.7a, Libtool team:

* New features:

  - Libtool ships and installs man pages for libtool and libtoolize now.
  - New libtool command line flag --help-all.
  - New libtool command line flag --no-silent (with alternate spelling
    --no-quiet). This flag (re)enables the default informational messages,
    but has no effect on so-called "verbose" output messages.
  - New libtool command line flag --no-verbose, which disables only
    the extra "verbose" output messages and has no effect on the
    default informational messages.
  - New convenience make targets 'check-noninteractive' to avoid long testsuite
    runs on Windows with popup windows in the middle, and 'check-interactive'
    for the complement set of tests.
  - New link mode flag -bindir to specify the location for installed PE DLLs.
  - Wrapper scripts and wrapper executables for programs linked against
    uninstalled shared libraries now support command-line options --lt-debug
    and --lt-dump-script.

* Important incompatible changes:

  - The wrapper command line option support described above introduces the
    following incompatibility: the wrapper will remove any command line
    options that begin with '--lt-*' from the argument list before launching
    (uninstalled) programs. Any '--lt-*' option on the command line not
    recognized by the wrapper will result in an error.
  - The type of the symbol lists variables (lt_*_LTX_preloaded_symbols) has
    been fixed in the manual and in a couple of tests to match the actual
    implementation.

* Changes in supported systems or compilers:

  - Improved support for 64bit Windows (mingw64).
  - Improved support for cegcc (Windows CE/PocketPC).
  - Support for GNU/kOpenSolaris (kopensolaris*-gnu).
  - Initial support for compilers on BlueGene BG/P.
  - Improved support for Atari FreeMiNT.
  - With binutils 2.19.50+, shared libraries can be built on AIX.
  - Initial support for the Cuda Compiler Driver on GNU/Linux.
  - Support for Haiku (i586-pc-haiku).
  - Initial support for GCC link-time optimization (LTO) flags.

* Bug fixes:

  - Fix 2.2.6 regression that prevented using the libltdl macros together
    with Autoconf 2.59 ('possibly undefined macro: LT_LIBEXT').
  - Fix 2.2.4 regression that caused arguments with special characters
    to be mangled by the compile wrapper for uninstalled programs on MinGW.
  - libtool command line flag --verbose now also enables explicit
    verbose output, in addition to its previous behavior of (re)enabling
    only the default informational output. See New Features, --no-silent.
  - Link tests are guarded by cache variables so they can be avoided for
    bootstrapping purposes (e.g., when link tests are not possible).
  - Argument mangling of execute mode has been improved (i.e., lessened).
  - Fix 2.1b regression that caused nm to not be the default name lister.
    The regression affected mainly (arguably broken) cross compiles.
  - Fix long standing bug that caused compiler checks for Fortran and
    C++ compilers to run twice.
  - Link mode works around a parallel build failure on Darwin 9.6.0 due
    to the 'ar' 'flock'ing an archive upon extraction, by protecting the
    extraction of convenience archives with a lock.
  - The Libtool macro files do not contain instances of __oline__ any more,
    easing merges for configure scripts that are added to version control.
  - Fix ancient bug where "-Wc," was turned into "$wl" (typically "-Wl,")
    when using the compiler driver to link programs. Now "-Wc," is stripped
    just as it is when linking libraries through the compiler driver.
  - Symbol versioning works with the GNU gold linker now.
  - Fixes for detection of shared library dependencies on MinGW systems.
  - Fixed Sun compiler detection on Solaris with sunCC, sunf77 etc. names.

* Miscellaneous changes:

  - The manual is distributed under the terms of the GNU FDL 1.3 now.

New in 2.2.6 2008-09-05: git version 2.2.5a, Libtool team:

* New features:

  - New lt_dloadvise_preload() call to set a hint that only preloadeded
    modules can be opened.
  - libtoolize no longer removes config.guess and config.sub, even when
    --install is passed.

* Changes in supported systems or compilers:

  - Fixes for ifort on Darwin, and newer Intel compilers (icc 10, ifort 9)
    on GNU/Linux.
  - Fixes for cwrapper (cygwin/mingw) under -stdc=c99.
  - Support cross compile of MinGW with Wine.
  - Initial support for cegcc (Windows CE/PocketPC) cross compilation.
  - Initial support for lf95 (Lahey Fortran 8.1) on GNU/Linux.

* Bug fixes:

  - Several testsuite issues have been fixed, thanks to user feedback.

  - Fix 2.2 regression that caused argz symbols to be exported from
    libltdl unrenamed on systems that do not have working argz.

  - Revert "lt_dlopen(NULL) works on AIX again.". It was not the
    correct fix.

  - Diagnose '-L' arguments correctly.

  - Libtool no longer tries to open devices as files in execute mode.

  - Libtool no longer removes *.gcno profile information from GCC.

New in 2.2.4: 2008-05-04: git version 2.2.3a, Libtool team:

* New features:

  - New libtoolize option --no-warn, for users that want to continue to
    use old libtool style without being nagged.
  - Options --debug, --no-warn, --quiet and --verbose can be passed to
    libtoolize through the environment variable LIBTOOLIZE_OPTIONS, for
    cleaner interaction between the user and libtoolize when called by
    autoreconf.

* Bug fixes:

  - The documentation for lt_dlopenadvise showed the wrong type for
    the lt_dladvise parameter.
  - The public declarations for lt_dlhandle and lt_dladvise are now
    incomplete struct types rather than void*, which means that nearly
    all casting is eliminated allowing the compiler to provide more
    type checking.
  - libtoolize no longer reports up-to-date files that it would have
    copied, unless --force is passed.
  - No longer reports that lt~obsolete.m4 needs to be added to aclocal.m4
    when it is already there.
  - When 'aclocal' copied the libtool macros directly into 'aclocal.m4'
    (i.e. AC_CONFIG_MACRO_DIR is not being used), libtoolize no longer
    reports that all macros need to be added to 'aclocal.m4', and
    diagnoses only the macro files that are missing or not up-to-date.
  - libtoolize now advises use of AC_CONFIG_MACRO_DIR to keep matching
    libtool macros in-tree where appropriate.
  - libtoolize now advises use of 'ACLOCAL_AMFLAGS = -I m4' (or
    equivalent) where appropriate, and errors out when ACLOCAL_AMFLAGS
    names a different directory to AC_CONFIG_MACRO_DIR.

New in 2.2.2: 2008-04-01: CVS version 2.2.1a, Libtool team:

* New features:

  - In compile mode, compiler output occurs in the user locale.  This
    feature has been present in 1.5.26 but not in 2.2.

* Changes in supported systems or compilers:

  - Initial shared library support for AmigaOS4 on powerpc.

* Bug fixes:

  - Fix 2.2 regression in libltdl that causes memory corruption upon
    repeated 'lt_dlinit(); lt_dlexit()'.
  - Fix 2.2 regression in libltdl that skipped the dlopen loader if
    the system also supports other loaders (e.g., Cygwin, HP-UX).
  - Fix 2.2 regression in that 'libtool --mode=execute CMD ARGS' does not
    transform ARGS that do not look like shell or C wrappers of libtool
    programs.
  - Fix 2.2 regression that kept cross-compiling to w32 from working.
  - Several testsuite issues have been fixed, thanks to user feedback.

New in 2.2: 2008-03-01; CVS version 2.1c, Libtool team:

* Bug fixes:

  - argz.c, lt__dirent.c and lt__strl.c are correctly distributed with
    parent projects using nonrecursive libltdl.
  - libtoolize no longer tries to install libtool files when libltdl is
    used in a non-autoconf parent package.
  - Don't add the CXX tag to libtool when there is no C++ compiler, even
    if AC_PROG_CXX sets a default g++ compiler where no such compiler
    actually exists.
  - make distcheck DISTCHECK_CONFIGURE_FLAGS=--disable-ltdl-install
    works again.

New in 2.1b: 2008-02-01; CVS version 2.1a, Libtool team:

* Important incompatible changes and obsoleted features:

  - Removed deprecated APIs from libltdl: lt_dlcaller_register,
    lt_dlhandle_next, lt_dlhandle_find, lt_dlforeach, lt_dlmutex_register,
    lt_dlmutex_lock, lt_dlmutex_unlock, lt_dlmutex_seterror,
    lt_dlmutex_geterror, lt_dlmalloc, lt_dlrealloc, lt_dlfree.
  - The Libtool and libltdl macros and the testsuite now assume a C89
    environment, consequently do not test for headers such as string.h,
    strings.h, memory.h any more.
  - Fix regression in libltdl symbol exports on Cygwin. Side effect:
    LT_GLOBAL_DATA and LT_SCOPE are now explicitly defined as
    declspec(dllexport), bypassing auto-export logic on Cygwin.
    This tracks existing behavior on MinGW.
  - The libtool script has been optimized a bit for more modern shells.
    This breaks use of the stdin file descriptor in libtool, and can
    break if a different shell is used to execute the libtool script
    than the one it was configured for.
  - The macros AC_ENABLE_SHARED, AC_DISABLE_SHARED, AC_ENABLE_STATIC, and
    AC_DISABLE_STATIC have been un-deprecated after deprecation in
    1.9b.
  - The macro LT_WITH_LTDL has been renamed to LTDL_INIT.
  - Fixed a branch-1-5/HEAD regression to only link uninstalled libraries
    statically with '-static'.  In order to compensate for this, there
    is a new link flag '-static-libtool-libs' to provide the previous
    '-static' semantics.

* New features:

  - Fix installation of libltdl so that it does not need Autoconf and
    Automake installed, in order to be usable in another package.  This
    lifts the restrictions introduced in 1.9b.
  - Default convenience or installable libltdl builds can optionally
    be declared using new 'convenience' or 'installable' options to the
    LTDL_INIT macro (as an alternative to individual LTDL_CONVENIENCE
    or LTDL_INSTALLABLE invocations).
  - New configure-time options to allow libltdl parent project builder
    to choose between installed and shipped libltdl, when invoking
    LTDL_INIT: --with-included-ltdl, --with-ltdl-include,
    --with-ltdl-lib.
  - New LT_CONFIG_LTDL_DIR macro to specify a different directory name
    for a convenience libltdl.
  - libtoolize has been completely overhauled.
  - 'libtoolize --install' now also installs 'install-sh'.
  - New libtoolize options: --non-recursive, --recursive, --subproject.
    These options control the way libltdl is installed into a package by
    libtoolize.  The new recursive and non-recursive build modes for
    libltdl don't require a subconfigure any more.
    The Libtool package itself builds libltdl nonrecursively.
  - The 'nonrecursive', 'recursive' and 'subproject' libltdl build
    modes are given as LTDL_INIT options.
  - New make variable LTDLDEPS for use in output_DEPENDENCIES.
  - New multi-module-loader safe libltdl handle iteration APIs:
    lt_dlhandle_iterate, lt_dlhandle_fetch, lt_dlhandle_map.
  - New lt_dlinterface_register to maintain separation of concerns
    between modules loaded by different libraries.
  - New lt_dlopenadvise takes a new lt_dladvise type argument, which
    lets the caller request local or global symbol visibility from the
    module loader with lt_dladvise_local and lt_dladvise_global
    respectively.  If neither is given, or if lt_dlopen (or lt_dlopenext)
    are called, then the system default module symbol visibility is used.
  - The new lt_dladvise_init/lt_dladvise_destroy based APIs also allow
    caller requests for a filename extension search with lt_dladvise_ext,
    and for marking a module unloadable with lt_dladvise_resident.
  - Allow shell special characters like '$' in source file names, but
    not in object names, to enhance GCJ support.
  - An entire new Autotest-based testsuite in addition to the old one.
    Both testsuites have been made more useful for testing
    cross-compilers.  The new testsuite exposes many more issues, but
    may also be a little rocky on exotic systems.
  - In 1.9b, a new variable inherited_linker_flags has been added to the
    libtool library files.  This variable takes flags that should be
    used by dependent libraries and programs, but that do not fit into
    'dependency_libs' for both clarity and backward-compatibility.

* Changes in supported systems or compilers:

  - Removed bitrotted support for xlc on Mac OS X.
  - Detection of compiler wrappers distcc/ccache and $host_alias prefix.
  - Basic support for PIE (position-independent executables).
  - Support for DragonFly BSD, improved support for FreeBSD.
  - Improved support for GNU/kFreeBSD and GNU/NetBSD.
  - Support for Interix 3 (Windows SFU) and newer versions.
  - Support for AIX 6.1.
  - Improved support for UnixWare.
  - Initial support for RDOS.
  - Initial Support for FC (modern Fortran).
  - Support for Portland Group compiler, the Sun compiler suite on GNU/Linux,
    and initial support for the IBM compiler suite on GNU/Linux/ppc.
  - Support for linux-dietlibc ('diet' as well as 'diet-dyn', separately).
  - Building libltdl with a C++ compiler has been undusted.
  - On (AIX?,) HP-UX, and OpenBSD, hardcoding has been changed to prefer
    rpath over absolute dependent library names.  This fixes DESTDIR
    installs, among others, on the non-HP-UX/PA systems.
  - Use of C++ templates together with shared libraries has been
    improved on some systems and with some compilers, but is still
    ongoing work.  Feedback is desirable here.

* Bug fixes:

  - Fix libltdl on static platforms.
  - Search paths with GCC on multilib systems like x86_64 have been fixed.
  - Fixed a regression that prevented use of libltdl without autotools.
  - Fix error with -version-info on systems with version_type=none, such
    as BeOS.
  - Fix symbol exporting for cases where command line length limits are
    exceeded.
  - Improve linking with C++ libraries on Solaris with Sun compiler.
  - Fix installation of libraries that are required by installation
    commands such as 'ln' or 'rm'.
  - More robust parsing of mangled '.la' files inside libltdl, fixing a
    possible overrun and a crash due to memory exhaustion.
  - Fix compile command line for gcj on MinGW.
  - Some configure variables have been renamed to fix caching:
    lt_prog_compiler_pic_works to lt_cv_prog_compiler_pic_works
    lt_prog_compiler_static_works to lt_cv_prog_compiler_static_works.
  - Fix 1.9b regression: lt_dlopen(NULL) works on AIX again.
  - Loads of smaller bug fixes.


New in 1.9f: 2004-10-23; CVS version 1.9e, Libtool team:
* Fix a regression in 1.9d, where ECHO was always set to 'echo' and the
  backslash quoting tests were never run.
* Fix a regression in 1.9d, where progpath was used for --no-reexec before it
  was set.
* Fix a regression in 1.9d, which required an installed automake to build the
  bootstrapped tarball.
* Fix hanging bug on MinGW.

New in 1.9d: 2004-10-03; CVS version 1.9c, Libtool team:
* If non-pic objects were not compiled, and libtool is called in link mode,
  libtool no longer silently creates an empty archive, but rather falls
  back to pic objects.
* When compiling C glue code with $LTCC, libtool now saves the setting of
  $compiler_flags from the C tag, and passes those flags to $LTCC.
* libtool no longer dies when concurrently creating directories with
  'make -j' on multi-processor hosts.
* Return type, and name parameter of lt_dlloader_remove are no longer
  'const'.
* Name parameter of lt_dlloader_find is no longer 'const'.
* The API for the slist ADT has been updated: slist_new has been replaced
  by slist_box; slist_unbox and slist_sort are new; the footprint of
  slist_remove and slist_fnid have changed; SListCallback and SListCompare
  types have been exchanged.  See libltdl/slist.c for documentation.
* libltdl is C89 compatible again.  lt_dlsymbol type removed, and lt_dlsymlist
  structure changed to avoid using C99 flexible arrays.
* Support self dlopening for executables on cygwin and mingw.
* Improved support for linux-gnu/ia64.
* Initial support for s390x-ibm-tpf.
* Fixed some memory leaks in libltdl.
* Improved support for OpenBSD (use rpath instead of hardcoding absolute
  file names).

New in 1.9b: 2004-08-29; CVS version 1.5a, Libtool team:
* The /^_?LT_[A-Z_]+$/ namespace is now reserved for Libtool's own macros.
  If you have any shell variables in this namespace they will need to be
  renamed.  If you have any macros in this namespace please rename them to
  prevent any possible future clash with libtool supplied macros.
* New LT_PREREQ macro for specifying minimum libtool requirement.
* New LT_INIT interface replaces AC_PROG_LIBTOOL, AC_ENABLE_SHARED,
  AC_DISABLE_SHARED, AC_ENABLE_STATIC, AC_DISABLE_STATIC,
  AC_ENABLE_FAST_INSTALL, AC_DISABLE_FAST_INSTALL, AC_LIBTOOL_DLOPEN,
  AC_LIBTOOL_WIN32_DLL and AC_LIBTOOL_PIC_MODE.  Use autoupdate to modernise
  your configure.ac files after installing this release.
* New LT_LANG interface to enable libtool support for a specific language.
* Language support is now only included if your configure.ac enables it,
  either through a call to AC_PROG_CXX etc. or LT_LANG.
* The libtool script will complain if it was built from mismatched ltmain.sh
  and libtool m4 macro versions.
* Like automake, libtoolize no longer installs config.guess and config.sub by
  default.  Use new --install option to get the old behaviour.
* libtoolize no longer supports the --ltdl-tar option.
* libtool script is now created by config.status.  Instead of interrogating
  './libtool' from configure.ac after calling AC_PROG_LIBTOOL, use the
  variable names directly.
* libltdl is no longer a self-contained package, and shares configury with
  the top level directory now.
* Shared objects (.lo) are no longer created when '-static' is passed in
  compile mode.
* New compile mode option '-shared' prevents creation of static objects (.o).
* New link mode option '-shared' creates only shared libraries at link time.
* If you configure libtool with --disable-shared (or if libtool does not
  support shared libraries on your platform) trying to build a library using
  '-shared' is a fatal error.
* New link mode option '-weak' tells libtool when not to propagate dependency
  libraries from dlpreopened modules.
* libtoolize installs libtool.m4, (ltdl.m4 if used,) and various supporting
  m4 definitions to AC_CONFIG_MACRO_DIR.
* Mode inference removed, shorthand for choosing modes added.
* Specifying -allow-undefined is now an error.
* Speed up max_cmd_len check.
* libltdl can now preopen modules from within a library, and libtool will
  accept -dlpreopen options when linking either a shared library or a
  convenience library.
* New function in libltdl: lt_dlhandle_find provides access to module handles
  by module name.
* New function in libltdl: lt_dlpreload_open opens all preloaded modules.
* libltdl no longer loads shared libraries with global symbol resolution,
  this caused problems when the symbols were intended to be overridden further
  up the stack; it is also not recommended practice.
* New function in libltdl: lt_dlhandle_first, primes handle iterations (using
  lt_dlhandle_next) to filter by module interface.
* libltdl no longer tries to support multi-threaded programming with
  lt_dlmutex_register(), which was unusable with POSIX threads anyway.
  The symbols are deprecated but exported for backwards compatibility.
* libltdl no longer uses lt_dlmalloc, lt_dlrealloc and lt_dlfree.  The symbols
  are still exported for backwards compatibility.
* The lt_dlinfo struct has a new module field that can be used by dlloaders.
* libltdl no longer supports pre-c89 compilers.  Some of the pre89 portability
  functions had compile time bugs in them anyway, so you guys can't have been
  using it :-)
* make install now deletes preexisting $prefix/share/libtool before installing
  latest files.
* Extracting symbols from an import library on cygwin and win32 now works.
* Initial support for amigaos-ppc.
* Improved support for OpenBSD.
* Support for Intel C++ version 8.0.
* New support for IBM's xlc and xlc++ on Mac OS X.
* Finished support for QNX RTOS.
* Bug fixes.

New in 1.5.8: 2004-08-07; CVS version 1.5.7a, Libtool team:
* Support for Intel C++ version 8.0.
* Improved support for OpenBSD.
* Support for xlc on Mac OS X.
* Better support for zsh as /bin/sh.
* Much faster check for command line length on all BSD systems.
* Better Mac OS X/darwin support.
* Bug Fixes.

New in 1.5.6: 2004-04-11; CVS version 1.5.5a, Libtool team:
* Installs libltdl files properly in $prefix/share/libtool/libltdl. 1.5.4
  did not install them at all.
* libltdl correctly guesses the extension for loadable modules again.

New in 1.5.4: 2004-04-03; CVS version 1.5.3a, Libtool team:
* Bug fixes.

New in 1.5.2: 2004-01-25; CVS version 1.5.0a, Libtool team:
* lt_dlrealloc is an official part of the libltdl API.
* --tag, --silent and --debug options are preserved and reused when libtool
  calls itself for relinking etc.
* '-pthread' and similar options are honoured when linking shared libraries.
* -no-suppress in compile mode shows compiler output for both PIC and non-PIC
  object compilation.
* New link mode option '-precious-files-regex' to prevent accidental removal
  of files you want to keep, such as test coverage data, from the temporary
  output directory.
* Directories specified in /etc/ld.so.conf are no longer hardcoded on GNU/Linux.
* Recognises the 'R' symbol type on Solaris so read-only symbols can be
  exported.
* Bug fixes.

New in 1.5.1: 2003-??-??; CVS version 1.5.0a, Libtool team:
* lt_dlrealloc is an official part of the libltdl API.
* Bug fixes.

New in 1.5: 2003-04-14; CVS version 1.4e, Libtool team:
* First stable release of multi-language architecture.
* libtool and libltdl support for Mac OS/X.
* libltdl will now use cygwins dlopen API instead of always forcing
  LoadLibrary.
* Support auto-import patch to binutils on cygwin for much improved dll
  support.
* Bug fixes.

New in 1.4.3: 2002-10-13; CVS version 1.4.2a, Robert Boehne:
* The libltdl subdirectory now bootstraps correctly with Automake 1.5.
* srcdir != builddir builds with Automake 1.5 work correctly.
* Support for mips-compaq-nonstopux.
* New command line argument, --preserve-dup-deps prevents removal of
  duplicate dependent libraries.

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.4.2: 2001-09-11; CVS version 1.4.1a, Gary V. Vaughan:
* libltdl now builds on solaris again
* diagnose and warn about not-quite-working combinations of gcc and
  ld on solaris.
* Improved OpenBSD support.
* Improved cygwin support.
* Bugfixes.

New in 1.4.1: 2001-09-03; CVS version 1.4.0a, Libtool team:
* Better error messages from libltdl when loading fails.
* Don't leave here-doc files behind.
* Improved support for OpenBSD.
* Libtool will build with autoconf-2.50 and higher.
* Plug memory management bugs in libltdl.
* Prefer shl_load to dlopen for better operation on HP-UX.

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: 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
  https://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*
-- 

Copyright (C) 1996, 1998-2019, 2021-2026 Free Software Foundation, Inc.

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.
