2009-11-16  Peter O'Gorman  <peter@pogma.com>

	Really update libltdl version-info.
	* libltdl/Makefile.inc: Update version-info.

2009-11-14  Peter O'Gorman  <peter@pogma.com>

	Prepare for 2.2.6b release.
	* NEWS, configure.ac, libltdl/configure.ac, libltdl/Makefile.am:
	Update.

2009-11-14  Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>

	Don't load module.la from current directory by default.
	* libltdl/ltdl.c (try_dlopen): Do not attempt to load an
	unqualified module.la file from the current directory (by
	default) since doing so is insecure and is not compliant with
	the documentation.
	* tests/testsuite.at: Qualify access to module.la file in
	current directory so that test passes.

2009-11-14  Peter O'Gorman  <peter@pogma.com>

	Only use preopen loader to load preopened archives
	* libltdl/ltdl.c: Limit checking of .a to preopen loader.
	* tests/lt_dlopen_a.at: Add test.
	* Makefile.am: Add test.

2009-05-05  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	libtoolize: ignore trailing junk on scriptversion line.
	* libtoolize.m4sh (func_install_update): Ignore semi-colon or
	comment-sign and all following characters when parsing a
	`scriptversion' line in one of the auxiliary scripts; recent
	Automake-provided script have a stylized comment to induce
	Emacs to use UTC.
	Exposed by the `libtoolize config files serial update' test.

2008-09-07  Gary V. Vaughan  <gary@gnu.org>

	Fix typo in Makefile.maint.
	* Makefile.maint (git-news): Renamed to check-news, since it
	doesn't actually run git.  Adjust all dependees.

	Run `git commit -a' when no files are passed.
	* clcommit.m4sh (func_commit): Add -a argument if necessary.

	Prepare for next stable release.
	* libltdl/Makefile.inc (LTDL_VERSION_INFO): Update.
	* libltdl/m4/libtool.m4: Bump serial number to account for
	changes since 2.2.4 release.
	* INSTALL, config/config.guess, config/texinfo.tex: Updated
	from canonical source.
	* configure.ac (AM_INIT_AUTOMAKE): Specify dist-lzma, which
	was introduced after automake-1.10 was released.
	(abs_top_srcdir, abs_top_builddir): No need to substitute these
	from configure anymore, since we require automake 1.10.1, which
	does perform the substitutions properly.
	(TIMESTAMP): Normal releases were displaying the long-form
	timestamp.  Fix to show the short release timestamp as per
	alpha release numbers.
	* NEWS: Update with missing entries from ChangeLog.
	* HACKING (Release Procedure): We release lzma tarballs now
	but no xdeltas.
	* Makefile.maint: Updated to match Release Procedure
	instructions in HACKING.

	Convert mailnotify headers to git.
	* clcommit.m4sh: Improve mailnotify contents.

	Make ./commit useful again.
	* clcommit.m4sh: Major overhaul and simplification for git.

2008-09-06  Gary V. Vaughan  <gary@gnu.org>

	Fix 'DISTCHECK_CONFIGURE_FLAGS=--program-prefix=g' bug.
	* tests/testsuite.at (_LIBTOOLIZE_TRANSFORM): Fix test failures
	with --program-prefix, where the test case output contains the
	transformed name somewhere other than the beginning of a line.
	* libtoolize.m4sh (func_check_macros): Be sure to always use
	the transformed name in output messages.

2008-09-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Do not remove .gcno files when linking.
	* libltdl/config/ltmain.m4sh (func_mode_link): When removing
	potential output files before linking, do not remove *.gcno
	profile information GCC outputs next to object files in `.libs'.
	Report by Vincent Torri.

2008-09-01  Peter O'Gorman  <peter@pogma.com>

	Revert 75142db4f8afc65ba7aae0ed80ea0b35bd9cc382 (AIX libltdl
	dlopen(NULL)

	* libltdl/m4/ltdl.m4: Remove LTDL_DLOPEN_SELF_WORKS define.
	* libltdl/loaders/dlopen.c: Remove LTDL_DLOPEN_SELF_WORKS check.
	* libltdl/m4/libtool.m4 [aix]: Set export_dynamic_flag_spec to
	-Wl,-bexpall. This is a temporary workaround until a real fix
	is implemented.
	* NEWS: document it.

2008-08-26  Peter O'Gorman  <peter@pogma.com>

	Allow for extensions other than .a for preloaded modules.
	* libltdl/m4/ltdl.m4 (_LTDL_SETUP): Define LT_LIBEXT.
	* libltdl/ltdl.c (lt_dladvise_preload): Use it.
	Reported by Ralf Wildenhues.

2008-08-26  Peter O'Gorman  <peter@pogma.com>,
	    Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Remove unnecessary global argz functions.
	* libltdl/argz.c (argz_add,argz_count): Remove.
	* libltdl/argz_.h (argz_add,argz_count): Remove.
	* NEWS: Announce it.
	* tests/ltdl-api.at: Test so we don't repeat it.
	* Makefile.am: Add new test.

2008-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Initial support for Lahey Fortran on GNU/Linux.
	* libltdl/m4/libtool.m4 (_LT_COMPILER_PIC, _LT_LINKER_SHLIBS)
	[linux] <lf95>: Add support for Lahey Fortran 8.1.
	* NEWS, THANKS: Update.
	Suggested by Craig Tierney.

2008-08-21  Sam Thursfield  <ssssam@gmail.com>  (tiny change)

	Avoid leading separator in PATH for DLL search.
	* libltdl/config/ltmain.m4sh (func_mode_link) [cygwin, mingw]
	[ pw32, os2, cegcc]: Fix dllsearchpath not to contain leading
	separator.
	* THANKS: Update.

2008-08-21  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/config/ltmain.m4sh (func_mode_link): Quote $#.

	Disallow `-L path', do not misparse it silently.
	* libltdl/config/ltmain.m4sh (func_mode_link): Diagnose `-L'
	without argument, and `-L path', i.e., with a space.
	* tests/fail.at (Failure tests): Test for these failures.
	* THANKS: Update.
	Report by Olaf Lenz.

2008-08-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Avoid test failure due to broken dlpreloading of shared library.
	* tests/lt_dladvise.at (lt_dlopenadvise library loading): Drop
	some newlines in AT_CHECK commands, for better 'testsuite -x'
	output.  Only create a static installable libpreload.la, to
	avoid exposing the bug libtool currently has with preloading of
	shared libraries.  Add a note to revisit this later.

2008-08-12  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Parallel make testsuite fixes.
	* tests/configure-iface.at (installable libltdl)
	(--with-ltdl-include/lib, --with-included-ltdl): Add dlopened
	libmodule.la to main_DEPENDENCIES.
	* tests/old-m4-iface.at (AC_WITH_LTDL): Likewise, let ltdldemo
	depend upon module.la and libltdl/libltdlc.la.
	* tests/testsuite.at (LT_AT_MAKE): Invoke each target in turn,
	default to 'all'.
	* tests/early-libtool.at (config.lt): Define 'all' target.

	* HACKING: Update for git, fix some minor nits.

2008-08-11  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Remove use of exit in configure test sources.
	* libltdl/m4/libtool.m4 (_LT_TRY_DLOPEN_SELF): Return from main,
	to avoid using undeclared exit.
	Report against OpenMPI from Coverity via Jeff Squyres.

	* tests/configure-iface.at (convenience libltdl): Ignore warning
	from parallel make.

2008-08-07  DJ Delorie  <dj@redhat.com>

	* libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER) [tpf]
	<library_names_spec>: Fix typo in variable name.

2008-08-06  Steve Ellcey  <sje@cup.hp.com>

	Use -fPIC with GCC on HP-UX/ia64.
	* libltdl/m4/libtool.m4 (_LT_COMPILER_PIC, _LT_LINKER_SHLIBS)
	[ia64-*-hpux*]: Specify -fPIC when using GCC to build shared
	libraries.

2008-08-01  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* NEWS: Minor fixups.

2008-08-01  Gary V. Vaughan  <gary@gnu.org>

	Bring NEWS up to date.
	* NEWS: Add missing summaries since 2.2.4 release.

	Implement lt_dlopening of only preloaded modules.
	* libltdl/m4/ltdl.m4 (LTDL_INIT): Check for a libltdl that
	provides lt_dladvise_preopen when deciding if installed libltdl
	is 'new enough'.
	* libltdl/libltdl/lt__private.h (lt__advise): Add a new
	is_preload flag.
	* libltdl/ltdl.c (lt_dladvise_preload): New api call to set it.
	(try_dlopen): If it is set, and the search of preloaded modules
	didn't return a match, don't bother searching the filesystem.
	* libltdl/ltdl.h (lt_dladvise_preload): Declare it.
	* doc/libtool.texi (Libltdl Interface): Document it.
	* tests/lt_dladvise.at: Test it (and incidentally add some test
	coverage for `libtool -dlpreopen').
	* NEWS: Announce it.

2008-08-01  Vincent Torri  <doursse@users.sf.net>

	Add cegcc (Windows CE/PocketPC) support.
	* libltdl/config/ltmain.m4sh: Add 'cegcc' case where needed.
	* libltdl/m4/libtool.m4 (LT_CMD_MAX_LEN, LT_SYS_DLOPEN_SELF)
	(_LT_SYS_DYNAMIC_LINKER, _LT_CHECK_MAGIC_METHOD)
	(_LT_CMD_GLOBAL_SYMBOLS, _LT_COMPILER_PIC, _LT_LINKER_SHLIBS)
	(_LT_LANG_CXX_CONFIG): Likewise.
	* libltdl/m4/ltoptions.m4 (AC_LIBTOOL_DLOPEN): Likewise.
	* NEWS: Update.
	* THANKS: Update.

2008-07-31  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/config/ltmain.m4sh (func_to_host_path): Fix sh.test
	failure.
	Report by Paolo Bonzini.

2008-07-31  Paolo Bonzini  <bonzini@gnu.org>

	* ltmain.m4sh (func_emit_cwrapperexe_src): Factor
	multiple closed braces into the next cat command.

2008-06-19  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/libtool.m4 (_LT_COMPILER_PIC) [linux] <icc, icpc>:
	Use -fPIC, newer Intel compilers (icc 10, ifort 9) reject -KPIC.
	* tests/localization.at: Skip test if the compiler fails merely
	due to the locale setting.
	* THANKS: Update.
	Report by Vincent Lefevre.

2008-06-17  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* doc/libtool.texi (Linking executables, Static libraries)
	(Modules for libltdl, Distributing libltdl): Remove TABs from
	the manual.

2008-06-13  Peter O'Gorman  <peter@pogma.com>

	Support ifort on darwin.
	* libltdl/m4/libtool.m4 (_LT_DARWIN_LINKER_FEATURES): Build
	shared libraries with ifort.
	Reported by Christopher Hulbert.

2008-06-01  Charles Wilson  <libtool@cwilson.fastmail.fm>

	[mingw] fix cross-compile-with-wine case
	* libltdl/config/ltmain.m4sh (func_to_host_path)
	[host=mingw, build!=mingw|cygwin]: check that winepath
	stdout is non-empty and exit code is 0, instead of checking
	stderr.
	Reported by: Roumen Petrov

2006-06-01  Stas Maximov  <smaximov@ieee.org>  (tiny change)

	Check only regular files, not devices, for lalibs.
	* libltdl/config/ltmain.m4sh (functions func_lalib_p)
	(func_lalib_unsafe_p): Only read regular files and not device
	files.  Avoids blocking libtool executing gdb, when a
	pseudo-terminal device /dev/pts/NN is given as one of the
	arguments to gdb, as in:
	libtool --mode=execute gdb -q -nw -i mi -tty /dev/pts/4 prog

2008-05-31  Peter O'Gorman  <peter@pogma.com>

	Skip darwin test if fat link fails.
	* tests/darwin.at: Skip if we can not link a fat program.
	Reported by Daniel Macks <dmacks@netspace.org>

2008-05-26  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	libtoolize should not remove config.guess, config.sub.
	* libtoolize.m4sh (all_pkgconfig_files): Do not list
	config.guess nor config.sub.  We don't install them without
	--install, and the project may not be using Automake.
	Report by Andreas Schwab.

	Simplify argument parsing in cwrapper.
	* libltdl/config/ltmain.m4sh (func_emit_cwrapperexe_src):
	Use NULL where appropriate.  Do not compute length of arguments
	needlessly.

2008-05-25  Charles Wilson  <libtool@cwilson.fastmail.fm>

	[mingw] Add cross-compile support to cwrapper
	* libltdl/config/ltmain.m4sh (func_to_host_path) [$host=mingw]:
	If present, use winepath to convert from $build to $host
	if $build is neither mingw (msys) nor cygwin.  Use unconverted
	path as fallback when conversion fails. Also update comments.
	(func_to_host_pathlist) [$host=mingw]: Ditto. For fallback case,
	use simplistic ':' to ';' path separator translation.

2008-05-25  Charles Wilson  <libtool@cwilson.fastmail.fm>

	Cwrapper should not eat -- arguments
	* libltdl/config/ltmain.m4sh (func_emit_cwrapperexe_src)
	[file scope]: Defined all option strings in terms of macro
	LTWRAPPER_OPTION_PREFIX. Similarly defined all option string
	lengths in terms of macro LTWRAPPER_OPTION_PREFIX_LENGTH.
	[main]: Modified option parsing algorithm to pass -- on to
	target, and to not stop processing arguments when -- is seen.
	Added check for unrecognized options in reserved namespace
	defined by LTWRAPPER_OPTION_PREFIX.

2008-05-25  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix ifort settings again.
	* libltdl/m4/libtool.m4 (_LT_COMPILER_PIC) [linux] <ifort>:
	Unlike icc and ecc, not all ifort versions understand `-KPIC',
	e.g. version 10.1, so use `-fPIC' instead.
	Report by Jeff Squyres.

2008-05-20  Eric Blake  <ebb9@byu.net>

	Resynchronize argz whitespace changes from gnulib.
	* libltdl/m4/argz.m4: Kill trailing whitespace.
	* libltdl/argz.c: Likewise.

2008-05-19  Eric Blake  <ebb9@byu.net>

	Fix regression from two days ago.
	* libltdl/m4/ltdl.m4 (_LT_LIBOBJ): Don't refer to deleted macro.

2008-05-17  Eric Blake  <ebb9@byu.net>

	Speed up bootstrap by improving lt_combine.
	* libltdl/m4/ltsugar.m4 (lt_combine): Mirror Autoconf 2.62
	improvements.  Includes a semantic change where the separator can
	now be empty, and where an empty fourth argument is now treated as
	a valid suffix.
	* libltdl/m4/libtool.m4 (_lt_decl_varnames_tagged): Adjust to new
	semantics of lt_combine.
	(lt_decl_varnames_tagged): Fix quoting and optimize.

	Kill _LT_LIBSOURCES; it wasn't checking anything useful.
	* libltdl/m4/ltdl.m4 (_LT_LIBSOURCES): Delete.
	(LTDL_INIT): Ignore arguments to AC_LIBSOURCES during _LTDL_SETUP,
	on the assumption that libtoolize correctly installed them.

2008-05-13  Charles Wilson  <libtool@cwilson.fastmail.fm>

	[mingw|cygwin] Modify cwrapper to invoke target directly.
	* libltdl/config/ltmain.m4sh (func_to_native_path):
	New function. If $host is mingw, and $build is mingw
	or cygwin, convert path to mingw native format.
	(func_to_native_pathlist): New function. Ditto, for
	:-separated pathlists.
	(func_emit_cwrapperexe_src) [__CYGWIN__ && __STRICT_ANSI__]:
	Ensure putenv and setenv are declared. Define HAVE_SETENV.
	(func_emit_cwrapperexe_src) [main]: Add new constants to
	hold desired PATH settings; initialize and use functions
	above to convert to $host format if necessary. Add new
	command-line options --lt-env-set, --lt-env-prepend, and
	--lt-env-append. No longer emit wrapper script as integral
	part of launching child. Remove support for (now) unnecessary
	$TARGETSHELL. Exec actual target executable directly.
	(func_emit_cwrapperexe_src) [lt_setenv, lt_extend_str]
	[lt_split_name_value, lt_opt_process_env_set]
	[lt_opt_process_env_prepend, lt_opt_process_env_append]
	[lt_update_exe_path, lt_update_lib_path]: New functions.

2008-05-11  Charles Wilson  <libtool@cwilson.fastmail.fm>

	Ensure cwrapper compiles without warnings under -std=c99.
	* libltdl/config/ltmain.m4sh (func_emit_wrapper_part1):
	new function.
	(func_emit_wrapper_part2): new function.
	(func_emit_wrapper): delegate to new functions.
	(func_emit_cwrapperexe_src) [__CYGWIN__ && __STRICT_ANSI__]:
	ensure realpath is declared.
	(func_emit_cwrapperexe_src): declare two different strings
	to each hold part of the wrapper script content. Initialize
	using new func_emit_wrapper_partX functions.
	(func_emit_cwrapperexe_src) [main]: when emitting wrapper
	script content, use both strings.
	Reported by Yaakov Selkowitz.

2008-05-06  Charles Wilson  <libtool@cwilson.fastmail.fm>

	Ensure $OBJDUMP is defined
	* libltdl/m4/libtool.m4 (_LT_DECL_OBJDUMP): new macro ensures
	that $OBJDUMP is always defined sanely.
	(_LT_SYS_DYNAMIC_LINKER): call it.
	(_LT_CHECK_MAGIC_METHOD): call it.

2008-05-05  Gary V. Vaughan  <gary@gnu.org>

	Fix libtoolize test failure with aclocal < 1.10.1
	* tests/libtoolize.at
	(verbatim aclocal.m4 w/o AC_CONFIG_MACRO_DIR): Older aclocal
	requires a space between -I and the directory argument.
	Reported by Daniel Macks <dmacks@netspace.org>

2008-05-04  Gary V. Vaughan  <gary@gnu.org>

	Set SCM version number to 2.2.5a.
	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.2.5a.
	* NEWS: Updated.

	GNU Libtool 2.2.4 was released.

	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.2.4.
	* libltdl/Makefile.inc (LTDL_VERSION_INFO): C:R+1:A because the
	interfaces are unchanged, even though we improved the code some
	more.
	* NEWS: Updated.

	Macro file serial updates for next stable release.
	* libltdl/m4/libtool.m4, libltdl/m4/ltdl.m4,
	libltdl/m4/ltoptions.m4, libltdl/m4/lt~obsolete.m4: Bump serial
	numbers to account for changes since 2.2.2 release.

	Make libtoolize tests work with distcheck.
	* tests/testsuite.at (_LIBTOOLIZE_TRANSFORM): When $tst_aclocal
	is set, transform paths that use it to generic
	/usr/local/share/aclocal in time for AT_CHECK comparisons.

2008-05-03  Gary V. Vaughan  <gary@gnu.org>

	Don't trip over outdated acinclude.m4.
	* libtoolize.m4sh (all_pkgconfig_files, all_pkgmacro_files)
	(all_pkgltdl_files): New variables listing all files ever
	maintained by any release of libtoolize.
	(func_install_pkgconfig_parent, func_install_pkgltdl_files)
	(func_install_pkgconfig_subproject, func_install_pkgmacro_parent)
	(func_install_pkgmacro_subproject): Carefully clean up any files
	that may have been installed by previous libtoolize releases.
	* tests/libtoolize.at: New test for libltdl/acinclude.m4 removal.
	Reported by Andreas Schwab <schwab@suse.de>.

2008-05-02  Peter O'Gorman  <peter@pogma.com>

	It helps to close quotes.
	* libltdl/config/ltmain.m4sh (func_mode_link): Add closing '.

2008-05-01  Peter O'Gorman  <peter@pogma.com>

	Use AC_CHECK_TOOL for otool and otool64.
	* libltdl/m4/libtool.m4 (_LT_REQUIRED_DARWIN_CHECKS): Check.
	* libltdl/config/ltmain.m4sh (func_mode_link): Use.
	Reported by Richard Purdie <rpurdie@rpsys.net>

2008-04-30  Eric Blake  <ebb9@byu.net>

	Support cygwin 1.7.0 in loadlibrary loader.
	* libltdl/m4/ltdl.m4 (LT_LIB_DLLOAD) <cygwin>: Check for modern
	function.
	* libltdl/loaders/loadlibrary.c (vm_open): Avoid deprecated
	cygwin_conv_to_full_win32_path.

2008-04-29  Gary V. Vaughan  <gary@gnu.org>

	New libtoolize --no-warn option and LIBTOOLIZE_OPTIONS parsing.
	* libltdl/config/general.m4sh (opt_warning): New option.
	(func_warning): Only display a warning message if $opt_warning
	is true.
	* libtoolize.m4sh: Accept options in LIBTOOLIZE_OPTIONS
	environment variable.
	(--no-warn): Parse new option.
	(func_serial_update_check, func_keyword_update): Use func_warning.
	(func_check_macros): Bail out before style issues nags when
	$opt_warning is false.
	* doc/libtool.texi (Invoking Libtoolize): Document it.
	* tests/libtoolize.at: Test it.
	* NEWS: Updated.

	Fix libtoolize test failure with aclocal-1.10.1.
	* tests/libtoolize.at
	(verbatim aclocal.m4 w/o AC_CONFIG_MACRO_DIR): Force aclocal to
	search the source tree for latest libtool macros.

2008-04-24  Eric Blake  <ebb9@byu.net>

	Fix bug in 2008-04-21 type improvements.
	* libltdl/ltdl.c (load_deplibs): Fix casting bug.

2008-04-23  Michael Haubenwallner  <michael.haubenwallner@salomon.at>

	Use /nonexistent as destination for files not to be installed.
	* tests/darwin.at (darwin fat compile): Fix typo.
	* tests/inherited_flags.at (inherited_linker_flags): Change
	-rpath to /nonexistent.  This helps to avoid accidentally
	picking up libraries below /usr/local.
	* tests/template.at (simple template test): Likewise.  Fixes
	test failure for additional incompatible libstdc++ in
	/usr/local.
	* tests/testsuite.at (configure_options): Add
	--prefix=/nonexistent.

2008-04-23  Gary V. Vaughan  <gary@gnu.org>

	* libtoolize.m4sh (rerun_aclocal): Remove unused variable.
	Reported by Olly Betts <olly@survex.com>

2008-04-23  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* tests/static.at (ccache -all-static): Ignore link warnings.
	Report by Gary V. Vaughan.

2008-04-22  Gary V. Vaughan  <gary@gnu.org>

	Libtoolize now advises AC_CONFIG_MACRO_DIR use where appropriate.
	* libtoolize.m4sh (func_check_macros): Always advise use of
	AC_CONFIG_MACRO_DIR when not able to copy libtool macros into
	the project tree.
	* tests/libtoolize.at: New test for correct diagnosis of mismatch
	between AC_CONFIG_MACRO_DIR and ACLOCAL_AMFLAGS.
	Update expected output of other tests.
	* NEWS: Updated.

2008-04-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix regression over 1.5.26 with ccache $CC -all-static.
	* libltdl/config/ltmain.m4sh (func_mode_link): Add
	$link_static_flag to compile_command and link_command only
	later, instead of right after a possible compiler wrapper.
	* tests/static.at (ccache -all-static): New test.
	* THANKS: Update.
	Report by Richard Purdie.

2008-04-22  Andreas Schwab  <schwab@suse.de>
	    Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix default argument for AC_LIBLTDL_CONVENIENCE.
	* libltdl/m4/ltdl.m4 (AC_LIBLTDL_CONVENIENCE): Default argument
	to libltdl.
	(AC_LIBLTDL_INSTALLABLE): Likewise.
	* tests/configure-iface.at (convenience libltdl): New test.

2008-04-21  Gary V. Vaughan  <gary@gnu.org>

	Only complain that files are up-to-date with --force.
	As a side effect, this also means that when `aclocal' copies the
	libtool macros into `aclocal.m4' libtoolize complains only about
	the macro files that are missing or not up-to-date.
	* libtoolize.m4sh (func_echo_once): New function that prints
	the contents of a named variable only on the first call.
	(func_aclocal_update_check): New function that compares serial
	numbers of libtool macros in aclocal.m4 and only diagnoses the
	missing files.
	(func_copy, func_copy_cb, func_copy_some_files, func_serial_update)
	(func_keyword_update, func_ltmain_update, func_config_update)
	(func_install_update): Accept a new argument naming a variable
	containing a header string to print with func_echo_once iff any
	body text is output by this function.
	(func_install_pkgmacro_subproject, func_install_pkgmacro_parent)
	(func_install_pkgltdl_files, func_install_pkgconfig_subproject)
	(func_install_pkgconfig_parent: Set and pass a suitable
	header string variable for the above functions.
	(func_serial_update_check): Don't advise rerunning `libtoolize
	--force' when aclocal.m4 is not m4_including libtoolize installed
	macro files.
	* tests/testsuite.at (_LIBTOOLIZE_TRANSFORM): Transform generic
	/usr/local/share/aclocal paths to point into the uninstalled
	libtool macro directory.
	* tests/libtoolize.at: Update tests that were checking for old
	behaviour of outputing `file is already up to date' even when
	--force was not passed.
	* tests/libtoolize.at: New tests to prevent regressions of these
	smarter messages.
	* NEWS: Updated.
	Reported by Olly Betts <olly@survex.com>

	Capture lt~obsolete.m4 serial number correctly in libtoolize.
	* libltdl/m4/lt~obsolete.m4: Add the filename to the #serial
	marker so that libtoolize's serial number checks can find it
	in a non-include using aclocal.m4.
	* NEWS: Updated.
	Reported by Olly Betts <olly@survex.com>

	Allow better compile time type checking for lt_dladvise.
	* libltdl/lt__private.h (lt__handle, lt__advise): Typedefs
	removed in favour of...
	* libltdl/ltdl.h (lt_dlhandle),
	libltdl/libltdl/lt_dlloader.h (lt_dladvise): ...changing from
	void* to forward declarations.
	* libltdl/loaders/dlopen.c, libltdl/loaders/loadlibrary.c,
	libltdl/lt_dlloader.c, libltdl/ltdl.c: Remove many redundant
	type casts.
	* NEWS: Updated.
	Suggested by Bob Friesenhahn <bfriesen@simple.dallas.tx.us>

2008-04-21  Peter O'Gorman  <peter@pogma.com>

	basename does not take a list of strings.
	* libltdl/config/ltmain.m4sh(func_extract_archives): Use sed
	$basename.
	* tests/darwin.at: New. Check that we can built fat program,
	shared library and convenience library.
	* Makefile.am: Add test.
	Reported by LiKai Liu <liulk@cs.bu.edu>

	Use AC_CHECK_TOOL for lipo too.
	* libltdl/m4/libtool.m4 (_LT_REQUIRED_DARWIN_CHECKS): Check.
	* libltdl/config/ltmain.m4sh (func_extract_archives): Use.

2008-04-20  Gary V. Vaughan  <gary@gnu.org>

	Fix misleading lt_dlopenadvise documentation.
	* doc/libtool.texi (lt_dlopenadvise): The last parameter is of
	type lt_dladvise, not lt_dladvise*.
	(my_dlopenext): Correct the example too.
	* NEWS: Updated.
	Reported by Gary Kumfert <kumfert@llnl.gov>

2008-04-19  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix testsuite cleanup warnings on AIX with NFS.
	* tests/testsuite.at [ aix ]: Set file mode creation so that
	'others' have no permissions.  Shared libraries are kept in
	memory on AIX after use if they are world-readable, which means
	on NFS mounts cleanup of test group directories will fail later.
	* THANKS: Update.
	Report and analysis by Michael Haubenwallner.

	Fix nonportable use of expr.
	* libltdl/config/ltmain.m4sh (func_mode_link) <Transforming
	deplibs into only shared deplibs>: Fix expr portability issues,
	noted on FreeBSD.  While at it, simplify and avoid forking.
	Report by Bob Friesenhahn.

	Exploit shell arithmetic expansion and ${#var}.
	* libltdl/m4/libtool.m4 (_LT_CHECK_SHELL_FEATURES): Also check
	for arithmetic expansion, and ${#var}.
	(_LT_PROG_XSI_SHELLFNS): Define func_arith and func_len
	accordingly, falling back on 'expr'.  Note that the argument to
	func_len may not start with a hyphen.  In the pre-Posix
	fallback, take care not to rely on the exit status of the
	variable assignment (not portable), but set the length to
	$max_cmd_len instead.
	* libltdl/config/ltmain.m4sh (func_mode_link): Use func_arith
	and func_len throughout for integer arithmetic, fixing
	quadratical amount of counting for reloadable object and
	piecewise archive linking.  Change all comparisons with
	max_cmd_len to test for smaller, non-equal length.
	* THANKS: Update.
	Suggested by Roland Mainz.

	* libltdl/config/ltmain.m4sh (func_mode_compile): Avoid
	redundant removal of old output files before compilation.
	Do not remove $obj until we have successfully grabbed the
	lockfile (in case the compiler doesn't grok `-c -o'), because
	it might be identical to $output_obj.
	At the end of the function, before we remove the lockfile,
	update $removelist so that if the trap hits after the lockfile
	has been removed, we do not accidentally remove $output_obj that
	does not belong to us.
	(func_write_libtool_object): Use $MV instead of mv.

2008-04-18  Andreas Schwab  <schwab@suse.de>

	* libltdl/m4/ltoptions.m4 (AC_ENABLE_SHARED): Check optional
	argument.
	(AC_ENABLE_STATIC): Likewise.
	(AC_ENABLE_FAST_INSTALL): Likewise.

2008-04-16  Eric Blake  <ebb9@byu.net>

	Make ChangeLog merges easier.
	* .gitattributes: New file.
	* HACKING: Mention how it helps.

2008-04-15  Peter O'Gorman  <peter@pogma.com>

	Allow bootstrap from git repository.
	* Makefile.am: Pass srcdir as an argument to mkstamp and expect
	only 2 fields in mkstamps output.
	* clcommit.m4sh: Ditto.
	* configure.ac: Ditto.
	* libltdl/config/mkstamp: return a revision and date based on
	the number of lines which look like dates in all the ChangeLog*
	files in the directory we got as arg 1.

2008-04-11  Eric Blake  <ebb9@byu.net>

	Fix usage of setmode without declaration on cygwin.
	* libltdl/config/ltmain.m4sh (func_emit_cwrapperexe_src): Ensure
	setmode has prototype for both mingw and cygwin.

2008-04-10  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Move non-XSI
	definition of func_dirname_and_basename ...
	* libltdl/config/general.m4sh (func_dirname_and_basename):
	... here, to use it for the other scripts that use general.m4sh
	(and as portable fallback for libtool).  Add marker for early
	insertion of generated shell functions (into libtool, not the
	other scripts) here.
	Use func_dirname_and_basename to compute progname, progpath.
	* libltdl/config/ltmain.m4sh (func_mode_help): Remove marker
	for insertion of generated shell functions.
	* tests/sh.test: Adjust function definition test to not match
	function call.

	* libltdl/m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS) <func_xform>:
	New function.
	* libltdl/config/ltmain.m4sh (func_mode_compile): Use it to
	avoid two forks with XSI shells.
	* tests/suffix.test: Also test a file with multiple dots.

2008-04-10  Peter O'Gorman  <peter@pogma.com>

	* libltdl/config/ltmain.m4sh (func_win32_libid,
	func_generate_dlsyms, func_extract_an_archive,
	func_extract_archives, func_mode_help): move these so they
	appear after func_mode_compile.
	* tests/nomode.test: Check that --mode=link --help works.
	Reported by Josh Triplett <josh@freedesktop.org>

2008-04-07  Gary V. Vaughan  <gary@gnu.arg>

	* doc/libtool.texi (Libltdl interface): Add missing
	documentation for lt_dlopenavise.
	Reported by Anton Erti <anton@mips.complang.tuwien.ac.at>

	* configure.ac, libltdl/configure.ac (AM_INIT_AUTOMAKE): Use
	gnu rather than gnits standards so that version number 2.2.3a
	is not rejected!
	Reported by Olly Betts <olly@survex.com>

2008-04-01  Gary V. Vaughan  <gary@gnu.arg>

	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.2.3a.

	GNU Libtool 2.2.2 was released.

	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.2.2.
	* libltdl/Makefile.in (LTDL_VERSION_INFO): C:R+1:A because the
	interfaces are unchanged, even though we improved the code some
	more.
	* NEWS: Updated.

	* libltdl/m4/libtool.m4, libltdl/m4/ltdl.m4,
	libltdl/m4/ltoptions.m4: Bump serial numbers to account for
	changes since 2.2 release.

2008-03-27  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/libtool.m4 [_LT_REQUIRED_DARWIN_CHECKS]: Fix the
	test for -single_module and log it to config.log.
	Reported by Torok Edwin and Nigel Home.

2008-03-24  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Document that disable-static plus -all-static is not portable.
	* doc/libtool.texi (Link mode): -all-static does not go well
	with disable-static on most systems.
	* tests/static.at (static linking flags for programs) [!aix]:
	With --disable-static but nonempty link_static_flag, skip the
	m-all-static link.  Do not skip it on AIX, as there the
	enable_static is self-inflicted, and thus expected to work.
	* THANKS: Update.
	Report by Nix.

2008-03-17  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/libtool.m4 (_LT_CHECK_BUILDDIR): No need to escape
	backticks in argument to AC_MSG_WARN or AC_MSG_ERROR.
	* libltdl/m4/ltdl.m4 (_LTDL_INSTALLABLE, LTDL_INIT): Likewise.

2008-03-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/config/ltmain.m4sh (NLS nuisances): Fix quoting of
	localization variables for shell-active characters.
	* tests/localization.at (localized compiler messages): Extend
	test.
	* THANKS: Update.
	Report by Mike Frysinger.

2008-03-15  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* tests/defs.m4sh (func_get_config): Build egrep regex to speed
	up extracting several variables at once.  Use it to extract all
	default variables at once.  Also extract build_alias and
	host_alias from the libtool script.
	(func_configure_nofail): Use build_alias and host_alias for
	--build and --host, respectively.  Pass each if nonempty.
	* tests/testsuite.at: Pass --build if build_alias is nonemtpy.
	* tests/quote.test: Extract ECHO and wl at once.

	* libltdl/m4/ltoptions.m4 (AC_LIBTOOL_WIN32_DLL): Require
	AC_CANONICAL_HOST.
	* THANKS: Update.
	Report by Jakub Bogusz.

2008-03-14  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* NEWS: Update.

2008-03-12  Charles Wilson  <libtool@cwilson.fastmail.fm>

	* libltdl/config/ltmain.m4sh (func_emit_cwrapperexe_src) [file
	scope]: additional #includes and #defines to support...
	(func_emit_cwrapperexe_src) [main]: ensure stdout is set to
	binary mode for cygwin|mingw builds. Ensure temporary script
	file is written in binary mode for cygwin|mingw builds.
	(func_mode_link) [cygwin|mingw]: cross-build support - only
	use cwrapper to generate shell wrapper if building native;
	otherwise use func_emit_wrapper()

2008-03-12  Henning Nielsen Lund  <hnl_dk@amigaos.dk>

	* libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER)
	(_LT_COMPILER_PIC, _LT_LINKER_SHLIBS) [amigaos]: Port to
	AmigaOS4 shared libraries on powerpc.
	* libltdl/m4/ltdl.m4 (LT_SYS_DLOPEN_DEPLIBS) [amigaos]:
	Likewise.
	* THANKS, NEWS: Update.

2008-03-09  Bruno Haible  <bruno@clisp.org>
	and Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix compiler output to be in the user locale.
	* libltdl/config/general.m4sh (func_show_eval_locale): New
	function, for running commands in the user locale.
	* libltdl/config/ltmain.m4sh (func_mode_compile): Use it for
	compiling.
	* tests/localization.at (localized compiler messages): New test.
	* Makefile.am: Adjust.
	Report by Bruno Haible.

2008-03-08  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix several test failures on Cygwin and MinGW.
	* tests/nonrecursive.at: Use -no-undefined for foo.la.
	* tests/recursive.at: Likewise.
	* tests/subproject.at: Likewise.
	* tests/lt_dladvise.at: For systems where undefined symbols are
	not allowed, to not try to load the module libdepend.
	[ mingw ]: Add to list of such systems.
	* tests/testsuite.at (_LT_AT_TRANSLATE_TEXT_OUTPUT): New macro,
	to translate line ending of expout and experr files suitable for
	host executables.
	(LT_AT_CHECK, LT_AT_NOINST_EXEC_CHECK): Use it.
	Report by Bob Friesenhahn.

	Fix installcheck dependencies, fix for --program-transform-name.
	* Makefile.am (installcheck-local): Depend upon tests/atconfig
	and $(srcdir)/$(TESTSUITE).
	* tests/testsuite.at (_LIBTOOLIZE_TRANSFORM): New macro.
	(LT_AT_CHECK_LIBTOOLIZE): Use it to transform expout and experr
	files suitably.
	* HACKING: Update.

	Drop usage of obsolete macros AC_EXEEXT and AC_OBJEXT.
	* libltdl/m4/libtool.m4 (_LT_ENABLE_LOCK, _LT_COMPILER_OPTION)
	(_LT_COMPILER_C_O, LT_PATH_NM, _LT_CMD_GLOBAL_SYMBOLS, _LT_SETUP):
	Drop usage of obsolete AC_OBJEXT and AC_EXEEXT.
	* tests/am-subdir.at (C++ subdir-objects): Likewise.

2008-03-07  Peter O'Gorman  <peter@pogma.com>

	* tests/convenience.at (Java convenience archives): Skip test if
	gcj cannot compile a working executable from .java files.
	Report by Nelson H. F. Beebe.

	* libltdl/m4/libtool.m4 (_LT_LANG_GCJ_CONFIG): Need to set LD.
	Reported by Nelson H. F. Beebe.

2008-03-06  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/libtool.m4 (_LT_PROG_FC): Undo commit - bad idea.

	* libltdl/m4/libtool.m4 (_LT_PROG_FC): Report FC=no if the FC
	compiler is not a GNU compiler and the CXX compiler is a GNU
	compiler.
	Reported by Nelson H. F. Beebe.

2008-03-06  Gary V. Vaughan  <gary@gnu.org>

	* Makefile.maint (TSDEPS_DIST): Removed.  No longer used.
	(TSDEPS): libtool.m4 has long since moved to libltdl.
	(cvs-dist): Don't put the suffix dot in twice.

2008-03-06  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* tests/convenience.at (Java convenience archives): Skip test if
	gcj cannot compile a .java file.
	Report by Nelson H. F. Beebe.

2008-03-05  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/config/ltmain.m4sh (func_lalib_unsafe_p): redirect
	and restore from stdin, not stdout.
	* tests/execute-mode.at (execute mode): Adjust test to catch
	this.
	Report by Roberto Bagnara.

2008-03-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix libltdl to not skip dlopen on systems with several loaders,
	such as HP-UX, Cygwin.
	* libltdl/slist.c (slist_concat): When appending to the tail
	of a list, do not drop items off the beginning of the list.
	* NEWS: Update.

	* libltdl/config/ltmain.m4sh (func_mode_execute): Replace only
	arguments we have identified as shell or C wrappers.
	(func_emit_wrapper): Output error message on stderr.
	* tests/execute-mode.at: New file, with --mode=execute tests.
	* Makefile.am: Adjust.
	* NEWS: Update.
	Fixes 2.2 regression.  Report by Roberto Bagnara.

	* libltdl/m4/libtool.m4 (_LT_CONFIG): Drop misleading `GNU'
	prefix before the host package name in the "Generated by" line
	for the libtool script.
	* THANKS: Update.
	Reports by Peter Rosin and Roberto Bagnara.

	* doc/libtool.texi (Module loaders for libltdl): Fix typo.

	* libltdl/loaders/dld_link.c (vl_exit): New function, zero out ...
	(vtable): ... this new file static variable split out from ...
	(get_vtable): ... here.  Initialize vtable, register vl_exit as
	dlloader_exit function.
	* libltdl/loaders/dlopen.c: Likewise.
	* libltdl/loaders/dyld.c: Likewise.
	* libltdl/loaders/load_add_on.c: Likewise.
	* libltdl/loaders/loadlibrary.c: Likewise.
	* libltdl/loaders/shl_load.c: Likewise.
	* libltdl/loaders/preopen.c: Likewise; vl_exit existed here
	already.
	* tests/lt_dlexit.at (lt_dlexit unloading libs): Update test.
	* NEWS: Update.
	Report by Andreas Schwab.

2008-03-01  Gary V. Vaughan <gary@gnu.org>

	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.3a.

	GNU Libtool 2.2 was released.

	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.2.
	* NEWS: Updated.

	* tests/lt_dladvise.at, tests/lt_dlexit.at,
	tests/need_lib_prefix.at: Skip these tests when called from
	`make distcheck DISTCHECK_CONFIGURE_FLAGS=--disable-ltdl-install'.
	The tests try to link against the dummy installed libltdl.la
	from .../_inst/lib/libltdl.la, which does not exist when
	configured with --disable-ltdl-install.

2008-02-29  Gary V. Vaughan  <gary@gnu.org>

	* libltdl/m4/argz.m4 (AC_CHECK_FUNCS): Also use our replacement
	argz if the system argz_add or argz_count are missing.
	Report by Juan Manuel Guerrero <juan.guerrero@gmx.de>.

2008-02-26  Karl Berry  <karl@freefriends.org>

	* libltdl/argz.c (argz_add, argz_count): New functions.
	* libltdl/argz_.h: Declare them.
	Report by Juan Manuel Guerrero <juan.guerrero@gmx.de>.

2008-02-20  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/libtool.m4 (_LT_LANG_GCJ_CONFIG): Do not call the
	_LT_SYS_DYNAMIC_LINKER macro here.
	Reported by Mike Frysinger <vapier@gentoo.org>

2008-02-15  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/libtool.m4 (_LT_SYS_HIDDEN_LIBDEPS): Fix typo.

2008-02-14  Peter Breitenlohner  <peb@mppmu.mpg.de>

	* libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER): better handling
	of predefined values for lt_cv_sys_lib_search_path_spec and
	lt_cv_sys_lib_dlsearch_path_spec.

2008-02-14  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libtoolize.m4sh (func_install_pkgconfig_files): Only call
	func_install_pkgconfig_parent if $seen_autoconf.
	* tests/standalone.at (compiling softlinked libltdl)
	(compiling copied libltdl, installable libltdl)
	(linking libltdl without autotools): Use checked libtoolize
	calls to catch warnings.

2008-02-13  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/configure.ac: Bump package version.
	* HACKING: Reminder to do it next time, too.

2008-02-11  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* tests/mdemo/Makefile.am (@LIBLTDL@): Update outdated
	dependencies.
	($(top_distdir)/libltdl/libtool): Remove.
	Fixes spurious mdemo-dryrun failure with OpenBSD make.

2008-02-09  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/libtool.m4 (_LT_COMPILER_PIC) [linux] <ifort>:
	Treat like icc and ecc, for fixed `-Wl,' and `-KPIC' settings.

2008-02-08  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* tests/archive-in-archive.at
	(static library contains static library): Test also the actual
	broken link command, and the following install command, as
	UnixWare ar rightly refuses to put an archive into an archive.
	Report by Tim Rice.

2008-02-06  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/ltoptions.m4 (_LT_SET_OPTIONS): Only set default
	LT_INIT values for LT_INIT, not LTDL_INIT.
	Reported by Jochem Huhmann <joh@revier.com>

2008-02-01  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* tests/testsuite.at (LT_AT_TAG): For the CXX tag, if $CXX is
	g++, check that `g++ -v' works; AC_PROG_CXX may have set that
	as default value even if it found no C++ compiler.
	Report by Andreas Schwab.

2008-02-02  Gary V. Vaughan  <gary@gnu.org>

	* libltdl/Makefile.inc (EXTRA_DIST): Now that we're not using
	Autoconf's AC_SOURCES macro, Automake can't trace our extra
	source files argz, lt__dirent.c and lt__strl.c.  List them
	manually here to make sure they are distributed.
	* NEWS: Updated.
	Reported by Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>

2008-02-01  Gary V. Vaughan  <gary@gnu.org>

	* configure.ac (AC_INIT): Bump version number to 2.1c.

	GNU Libtool 2.1b was released.

	* configure.ac (AC_INIT): Bump version number to 2.1b.
	* libltdl/Makefile.inc (LTDL_VERSION_INFO): Increment to account
	for new interfaces since the last libltdl update.
	* HACKING (Release Procedure): Note that LTDL_VERSION_INFO is now
	kept in libltdl/Makefile.inc.

2008-02-01  Gary V. Vaughan  <gary@gnu.org>

	* tests/cdemo, tests/depdemo, tests/fcdemo, tests/pdemo,
	tests/demo, tests/f77demo, tests/mdemo, tests/tagdemo
	(distclean-local): Remove compiler file droppings left by
	Autoconf tests that prevent make dist from finishing on
	several machines including Mac OS 10.5.

2008-02-01  Gary V. Vaughan  <gary@gnu.org>

	Unfortunately, the autoconf implementation of AC_LIBOBJ and
	friends requires all libobjs to be in the same directory, as
	declared by AC_CONFIG_LIBOBJ_DIR.  That might prevent using
	either recursive or nonrecursive libltdl if the parent project
	has libobjs of its own, except that this patch tracks libltdl's
	libobjs in another namespace:

	* libltdl/m4/ltdl.m4 (_LT_LIBOBJ, _LT_LIBSOURCES): Versions of
	AC_LIBOBJ and AC_LIBSOURCES that save missing sources in a
	ltdl_LIBOBJS automake macro, instead of the global LIBOBJS
	automake macro.  Content of the macros inspired by code from
	gnulib-tool.
	(_LTDL_MODE_DISPATCH): Initialise lt_libobj_prefix in
	nonrecursive mode.
	(LTDL_INIT): Push and pop the new definitions around potential
	sites that call AC_LIBOBJ.  Also, using lt_libobj_prefix,
	initialise ltdl_LIBOBJS and ltdl_LTLIBOBJS.
	* libtoolize.m4sh (func_fixup_Makefile): Substitute ltdl_LIBOBJS
	and ltdl_LTLIBOBJS for LIBOBJS and LTLIBOBJS during copying
	either Makefile.am or Makefile.inc, depending on ltdl_mode.
	Reported by Eric Blake <ebb9@byu.net>

2008-01-30  Gary V. Vaughan  <gary@gnu.org>

	There are 5 distinct batches of files that libtoolize might
	install into a project, depending on whether libltdl is
	being installed in subproject mode, and in that case whether
	the parent project shares the config and macro directories
	with the subproject ltdl.  Make a separate function for each
	of those 5 batches (4 new functions below, plus the recently
	factored func_install_pkgltdl_files), and make a clearer
	distinction between when each of them is needed:

	* libtoolize.m4sh (func_install_pkgmacro_subproject):
	New function for installing and reporting on m4 files copied
	to a subproject ltdl directory.
	(func_install_pkgmacro_parent): Similar new function for m4
	files copied solely for the use of the parent project,
	including serial checking.
	(func_install_pkgconfig_subproject): New function for
	installing and reporting on config helper files copied to a
	subproject ltdl directory.
	(func_install_pkgconfig_parent): Similar new function for
	config helper files copied solely for the use of the parent
	project, including serial checking.
	(func_install_pkgmacro_files, func_install_pkgconfig_files):
	Rewritten in terms of the above functions.
	* tests/libtoolize.at: Adjust test expout's to match newly
	regularized libtoolize output.
	Move parent project pkgconfig files to build-aux directory
	so that progress messages show an obvious difference to
	pkgconfig files installed to subproject `config' directory.
	(nonrecursive ltdl with AC_CONFIG_MACRO_DIR): New test.
	(diagnose missing LT_CONFIG_LTDL_DIR): New test.
	(subproject ltdl with non-shared directories): New test.
	Reported by Eric Blake <ebb9@byu.net>

2008-01-29  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/libtool.m4 [darwin]: Changes to glob pattern matching
	to be safer.

	Search the compiler path too.
	* libltdl/m4/libtool.m4 (compiler_lib_search_dirs): New variable.
	* libltdl/config/ltmain.m4sh: Use it.
	Reported by Maynard Johnson

2008-01-28  Gary V. Vaughan  <gary@gnu.org>

	* libtoolize.m4sh (func_check_macros): Correct typo with
	'$opt_quiet ||' where '$opt_quiet &&' that was preventing
	func_check_macros from running!

	* libtoolize.m4sh: Set opt_ltdl whenever seen_ltdl is set
	so that libtoolize behaves as though --ltdl was passed even
	if it wasn't as long as LTDL_INIT (or equivalent) was seen
	in configure.ac.  Adjust redundant '$opt_ltdl || $seen_ltdl'
	to simply '$opt_ltdl'.
	Reported by Eric Blake <ebb9@byu.net>

	* libtoolize.m4sh (func_check_macros): Check opt_quiet
	in the function itself to simplify calling it.  Also move
	the definition of the function.

	* libtoolize.m4sh (func_scan_files): Be sure to set the
	default libltdl mode to 'subproject' when libtoolize is
	executed before configure.ac has been updated.

2008-01-27  Gary V. Vaughan  <gary@gnu.org>

	* libtoolize.m4sh (func_install_pkgconfig_files)
	(func_install_pkgmacro_files, func_install_pkgltdl_files):
	Factored out from the 'Main' section of the file.

	* libtoolize.m4sh (subproject_auxdir, subproject_macrodir):
	New variables to hold the default locations for auxfiles
	and macrofiles in a subproject libltdl.
	(ac_auxdir, ac_macrodir): New variables to hold the values
	passed by AC_CONFIG_AUX_DIR and AC_CONFIG_MACRO_DIR resp.
	(auxdir, macrodir): Adjust to contain the values to be
	used by libtoolize at runtime.

	* libtoolize.m4sh (func_fixup_Makefile)
	(func_massage_aclocal_DATA, func_massage_pkgltdl_files)
	(func_massage_pkgconfig_files): Add missing $opt_debug.

2008-01-27  Gary V. Vaughan  <gary@gnu.org>

	* libtoolize (func_fixup_Makefile, func_massage_aclocal_DATA)
	(func_massage_pkgltdl_files, func_massage_pkgconfig_files):
	Add missing $opt_debug.

2008-01-26  Gary V. Vaughan  <gary@gnu.org>

	* libtoolize.m4sh (Main): Copy (or link) libltdl sources
	into project tree when LTDL_INIT was seen, whether or not
	`--ltdl' is passed.
	(func_check_macros): Recommend LTDL_INIT instead of
	LT_WITH_LTDL when `--ltdl' is used before configure.ac is
	upgraded.
	* tests/libtoolize.at: Test that it works.
	(_LT_AT_LTDL_SETUP): Factor out some common test setup.
	Reported by Eric Blake <ebb9@byu.net>

2008-01-24  Peter O'Gorman  <peter@pogma.com>

	* doc/notes.texi: Fix errors in previous commit.

	* libltdl/m4/libtool.m4 (sys_lib_search_path_spec,
	sys_lib_dlsearch_path_spec): Allow for a cache variable
	lt_cv_sys_lib_... to set these at configure time.
	* doc/notes.texi: Short note about the above change.

2008-01-24  Eric Blake  <ebb9@byu.net>

	Add proper quoting to doc examples.
	* doc/libtool.texi: Use m4 quotes where appropriate.
	(Test descriptions): Fix truncated sentence.

2008-01-18  Gary V. Vaughan  <gary@gnu.org>

	* Makefile.am (DISTCLEANFILES): Remove libtool.dvi generated
	by 'make dvi'.

2008-01-17  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libtoolize.m4sh (func_scan_files): Avoid matching our own
	macro code when scanning configure.ac and aclocal.m4.
	Don't produce spurious output if AC_PROG_RANLIB is found.
	* tests/old-m4-iface.at (AM_PROG_LIBTOOL): Add a (weak) check
	that we don't match our own macro code when searching for user
	code calling us.
	* TODO: Updated.

2008-01-17  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	New variable LTDLDEPS for use in output_DEPENDENCIES.

	* libltdl/m4/ltdl.m4 (_LTDL_CONVENIENCE, _LTDL_INSTALLABLE)
	(LTDL_INIT): Set and substitute LTDLDEPS according to chosen
	method.
	* tests/configure-iface.at (installable libltdl)
	(--with-ltdl-include/lib, --with-included-ltdl): Test it.
	* doc/libtool.texi (Distributing libltdl): Document LTDLDEPS.
	* NEWS: Updated.
	Dependency bug exposed by Eric Blake in M4, found by Bob Proulx
	build daemon.

2008-01-17  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* doc/libtool.texi (Distributing libltdl): Clarify that
	`${top_build_prefix}' may be used in place of `${top_builddir}/'.

	* doc/libtool.texi (Distributing libltdl): Clarify that
	LTDL_INIT goes after LT_INIT; also show the latter in the
	respective examples.
	* tests/subproject.at: Adjust order.

2008-01-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/ltdl.m4 (_LT_ENABLE_INSTALL): Use AM_CONDITIONAL
	only if defined.  Allows to use libltdl without aclocal.

2008-01-16  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/libtool.m4: Set GCC var for every tag, avoids need
	to set withGCC var.

2008-01-15  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* configure.ac: Set libltdl nonrecursive option, to avoid
	configuring libltdl inside the Libtool package.

2008-01-14  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Silence all non-warning output from `libtool --silent'.
	* libltdl/config/ltmain.m4sh (func_generate_dlsyms)
	(func_extract_archives, func_mode_link): Use func_verbose
	instead of func_echo for all non-warning output.

	* Makefile.maint (fetch): Update to match upstream git sources.
	Pull `INSTALL' from gnulib instead of from Autoconf.

	* doc/notes.texi: Mention AIX binutils deficiency for C++ code.
	Report by Rainer Tammer.
	Suggest using bash for configure.

	* libltdl/m4/ltoptions.m4 (AC_ENABLE_SHARED): Fix to use
	new _LT_SET_OPTION semantics.

2008-01-12  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/ltdl.m4 (_LTDL_SETUP): Define
	LTDL_DLOPEN_SELF_WORKS, depending upon lt_cv_dlopen_self.
	* libltdl/loaders/dlopen.c (vm_open) [!LTDL_DLOPEN_SELF_WORKS]:
	Fail for dlopen(NULL), so that the preopen loader is used.  This
	fixes mdemo-exec.test failures on AIX where dlopen(NULL)
	succeeds but dlsym resolves no symbol.
	* NEWS: Update.
	Report by Rainer Tammer.

	* tests/am-subdir.at: Drop unused variables.
	* tests/configure-iface.at: Likewise.
	* tests/ctor.at: Likewise.
	* tests/early-libtool.at: Likewise.
	* tests/lt_dladvise.at: Likewise.
	* tests/old-m4-iface.at: Likewise.
	* tests/lt_dlexit.at: Likewise.  Also drop unused functions.

	* tests/old-m4-iface.at (AM_PROG_LIBTOOL): Also copy needed
	lt~obsolete.m4.

	* libltdl/config/ltmain.m4sh (func_mode_link): Fix warning
	about -l and -L for archives and objects as output, to not
	trigger for *.la files.  Non-convenience archives are diagnosed
	later on.

	* tests/configure-iface.at: Ensure LTDLINCL is expanded
	before CPPFLAGS, so that even CPPFLAGS=-I/usr/local/include
	won't make the tests prefer an installed ltdl.h over the
	in-package one.
	* tests/lt_dladvise.at, tests/lt_dlexit.at: Likewise.
	* tests/need_lib_prefix.at, tests/old-m4-iface.at: Likewise.
	Report by Bob Friesenhahn.

2008-01-11  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) <exclude_expsyms>:
	Also exclude `_GLOBAL__F[ID]_.*'.  Also set for the C++ tag.
	Fixes esp. demo/helldl build failure with GCC on AIX.
	Report by Rainer Tammer.

2008-01-11  Peter O'Gorman  <peter@pogma.com>

	* libltdl/m4/libtool.m4 [darwin]: Reorganize darwin support, use
	dsymutil if it is available so that debugging is possible, check
	for nmedit and dsymutil with AC_CHECK_TOOL, use the linker flag
	-exported_symbols_list in preference to nmedit if it is available.
	Drop support for xlc, it is probably broken.
	* tests/template.at [darwin]: Skip this test, I can not find a way
	to make it work on darwin9 with Xcode-3.0.
	* NEWS: Note the dropping of xlc support.

2008-01-08  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/libtool.m4 (LT_INIT): m4_require, not AC_REQUIRE
	_LT_CHECK_BUILDDIR, as it's m4_defun'ed, not AC_DEFUN'ed.
	Report by Peter O'Gorman.

	* libltdl/m4/ltdl.m4 (_LTDL_INSTALLABLE): Restore correct
	_LT_BUILD_PREFIX-using code.

2008-01-08  Gary V. Vaughan  <gary@gnu.org>

	* tests/recursive.at: Remove bogus --debug option.
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

	* tests/configure-iface.at: Build libltdl in a subdir so that
	it can be easily removed without trying to remove config.log
	on windows (which can't delete a file until it is closed).
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/ltdl.m4 (LTDL_INSTALLABLE): Use _LT_BUILD_PREFIX
	instead of ${top_builddir} for Autoconf-2.62.
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

	* libltdl/m4/ltdl.m4 (_LT_CONFIG_LTDL_DIR): Correct closing
	comment.
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

	* NEWS: Grammar nit.

	* tests/configure-iface.at, tests/nonrecursive.at,
	tests/recursive.at, tests/subproject.at (_LTDL_SETUP):
	Renamed to _LT_AT_LTDL_SETUP to avoid a nameclash with
	libltdl/m4/ltoptions.m4:_LTDL_SETUP from yesterday's patch.
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

2008-01-07  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* tests/runpath-in-lalib.at (Runpath in libtool library files):
	Compile program file without libtool.
	Report by Rainer Tammer.

2008-01-07  Rainer Tammer <tammer@tammer.net>  (tiny change)
	    Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Support AIX 6.1.
	* libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER)
	(_LT_CHECK_MAGIC_METHOD, _LT_COMPILER_PIC, _LT_LINKER_SHLIBS)
	(_LT_LANG_C_CONFIG, _LT_LANG_CXX_CONFIG, _LT_LANG_F77_CONFIG)
	(_LT_LANG_FC_CONFIG): Adjust case patterns to match AIX 6
	through 9 as well.
	* libltdl/m4/ltdl.m4 (LT_SYS_DLOPEN_DEPLIBS): Likewise.
	* NEWS: Update.
	* THANKS: Update.

2008-01-07  Gary V. Vaughan  <gary@gnu.org>

	Move libltdl build mode options from LT_CONFIG_LTDL_DIR to
	LTDL_INIT.  Accept (optional) new 'convenience' and 'installable'
	options in lieu of LTDL_CONVENIENCE and LTDL_INSTALL macros. And
	also, implement --with-included-ltdl, --with-ltdl-lib and
	--with-ltdl-include configure-time options:

	* libltdl/m4/ltoptions.m4: Associate existing option settings with
	LT_INIT.
	(LT_OPTION_DEFINE): Associate options 'nonrecursive', 'recursive',
	'subproject', 'installable' and 'convenience' with LTDL_INIT.
	(_LT_MANGLE_OPTION, _LT_SET_OPTION, _LT_IF_OPTION)
	(_LT_UNLESS_OPTIONS, _LT_SET_OPTIONS): Add MACRO-NAME argument to
	support options to named macros instead of hardcoding only LT_INIT
	options.
	* libltdl/m4/ltdl.m4 (_LTDL_CONVENIENCE): Factor common code from
	LTDL_CONVENIENCE and LTDL_INIT([convenience]).
	(_LTDL_INSTALLABLE): Factor out common code from LTDL_INSTALLABLE
	and LTDL_INIT([installable]).
	(_LTDL_SETUP): Renamed from LTDL_INIT.  Support new configure-time
	options: --with-included-ltdl, --with-ltdl-lib,
	--with-ltdl-include.
	(LTDL_CONVENIENCE, LTDL_INSTALLABLE): Adjust.
	(LT_WITH_LTDL): Removed.
	(LTDL_INIT): Parse caller options.
	* libltdl/m4/libtool.m4 (LT_INIT): Declare that this macro must be
	expanded before LTDL_INIT, and be sure to parse caller options.
	* configure.ac: Call directly into internal _LTDL_SETUP macro.
	* libtoolize.m4sh (func_scan_files): Ltdl mode argument moved from
	LT_CONFIG_LTDL_DIR to LTDL_INIT.
	* tests/nonrecursive.at, tests/recursive.at: Use new interfaces.
	* tests/configure-iface.at: Test it.
	* Makefile.am (TESTSUITE_AT): Add configure-iface.at.
	* doc/libtool.texi (Distributing libltdl): Document improved
	LTDL_INIT interfaces.
	* NEWS: Updated.

2008-01-02  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* libltdl/config/ltmain.m4sh (func_mode_link): When creating
	reloadable object files, avoid issuing plain `rm -f' without
	further arguments, even if the line length limit is ridiculously
	low as in the `Run tests with low max_cmd_len' test.  This
	failure is exposed on NetBSD.
	Report by Patrick Welche.

	* Makefile.am (EXTRA_DIST): Add ChangeLog.2007.
	* ChangeLog.2007: New, rotated, from...
	* ChangeLog: ...here.
	* NEWS, README, README.alpha, Makefile.am, libtoolize.m4sh,
	libltdl/config/getopt.m4sh, libltdl/config/ltmain.m4sh,
	libltdl/m4/libtool.m4: Bump copyright years.

Continued in ChangeLog.2007

	$Revision$ $Date$

vim:tw=72
