2010-08-28  Charles Wilson  <libtool@cwilson.fastmail.fm>

	Minor sysroot fixups.
	* libltdl/m4/libtool.m4 (_LT_WITH_SYSROOT): Fix typo.
	* tests/sysroot.at: Search also for crt0.o to accommodate cygwin.

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

	fix AIX testsuite regression
	* libltdl/config/ltmain.m4sh (func_resolve_sysroot): Partly
	revert v2.2.10-83-gc45a288: Do not absolutize path here, only do
	sysroot replacement.
	(func_mode_link): Adjust.

2010-08-22  Charles Wilson  <libtool@cwilson.fastmail.fm>

	fix --mode=finish
	* libltdl/config/ltmain.m4sh (func_mode_finish): Invert then/else
	blocks of the "if $opt_dry_run" conditional.

2010-08-15  Paolo Bonzini  <bonzini@gnu.org>

	improve code for sysroot --mode=finish
	* libltdl/config/ltmain.m4sh (func_mode_finish): Change sysroot_regex
	and sysroot_cmd delimiter from pipe to slash.  Wrap the entire for
	loop with "if $opt_dry_run...fi" and print an explanatory message
	for the --dry-run case.

2010-08-12  Paolo Bonzini  <bonzini@gnu.org>

	add libtool --mode=finish mode for sysroot
	* doc/libtool.texi (Finish mode): Document behavior when *.la files
	are passed.
	* libltdl/config/ltmain.m4sh (func_mode_finish): Eliminate sysroot
	or `=' signs representing it from files in $libs.
	* tests/sysroot.at (SYSROOT_TESTS): Test for presence of sysroot
	references before running libtool --mode=finish, and for absence
	afterwards.

	reorganize parsing of --mode=finish arguments
	* libltdl/config/ltmain.m4sh (func_mode_finish): Split arguments for
	directories and *.la files.

	fix sysroot handling for deplibs of preopened libtool libs
	* libltdl/config/ltmain.m4sh: Pass $dependency_libs of preopened libtool
	through func_resolve_sysroot.

	fix sysroot tests to pass on Fedora 13
	* tests/sysroot.at: Link $prefix/include into the sysroot as well, as
	required by newer GCC.

2010-07-29  Paolo Bonzini  <bonzini@gnu.org>

	initial version of the NEWS entry
	* NEWS: Document sysroot support.

	add sysroot test
	* Makefile.am (TESTSUITE_AT): Add tests/sysroot.at.
	* tests/sysroot.at: New.

	emit sysrooted paths when installing .la files
	* libltdl/config/ltmain.m4sh (func_replace_sysroot): New.
	(func_mode_link): Prepend paths in $libdir with the sysroot.  Further,
	replace the sysroot with = (using func_replace_sysroot) whenever
	such a path is written in a .la file.

	process postdeps to include sysrooted paths
	* libltdl/m4/libtool.m4 (_LT_FUNC_STRIPNAME_CNF): New (from Charles Wilson).
	(_LT_SYS_HIDDEN_LIBDEPS): Require it.  Use func_stripname_cnf to convert
	sysroot (-L= and -R=) usage in postdeps.  Adjust the code because -L, -R
	and -l flags will now always be separated from the rest of the argument.

	handle sysrooted paths when reading dependencies to la files
	* libltdl/config/ltmain.m4sh (func_mode_execute, func_mode_install,
	func_mode_link): Whenever a .la file occurs in another .la file,
	expand the sysroot path in it.

2010-07-28  Paolo Bonzini  <bonzini@gnu.org>

	teach libtool -L= and -R=
	* libltdl/config/ltmain.m4sh (func_resolve_sysroot): New.
	(func_mode_link): Always pass result of stripping -L and -R to
	func_resolve_sysroot before using it.  Remove absolute path expansion
	when func_resolve_sysroot subsumes it.  Expand sysroot in -rpath.
	When processing dependent libraries also resolve sysroot paths there.

	add --with-sysroot
	* libltdl/m4/libtool.m4 (_LT_HOST_NONCANONICAL, _LT_WITH_SYSROOT): New.
	(LT_SETUP): Require _LT_WITH_SYSROOT.

	handle sysroot flags
	* libltdl/config/ltmain.m4sh (func_mode_link): Recognize --sysroot
	option.

2010-08-22  Paolo Bonzini  <bonzini@gnu.org>

	Fix sed_make_literal_regex.
	* libltdl/config/general.m4sh (sed_make_literal_regex): Fix
	definition.

2010-08-15  Paolo Bonzini  <bonzini@gnu.org>

	Factor the sed command used to make a regex from a literal.
	* libltdl/config/general.m4sh (sed_make_literal_regex): New.
	* libltdl/config/ltmain.m4sh
	(func_cygming_dll_for_implib_fallback_core): Use it.  Suggested
	by Ralf Wildenhues.

2010-08-21  Rainer Tammer <tammer@tammer.net>  (tiny change)

	Avoid issues with AIX resident shared libraries in old testsuite.
	* tests/defs.m4sh [aix]: Remove file mode permission for others,
	so shared libraries are not kept in memory after execution.
	Fixes failures of repeated mdemo-inst.test with on AIX 5.3.

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

	Skip part of versioning test on AIX.
	* tests/versioning.at (versioning): The AIX linker always
	records the unversioned library name, even with runtimelinking,
	so skip the execution test for the incompatibly upgraded
	library.
	Report by Rainer Tammer.

	Remove dead code from versioning test.
	* tests/versioning.at (versioning): No need to build unused
	prog3.

2010-08-20  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Don't hide the table of contents in the manual.
	* doc/libtool.texi: Move the table of contents to the beginning.
	Prompted by patch from Bruno Haible against Automake.

	Remove superfluous dependency in Makefile.am.
	* Makefile.am (tests/demo-conf.test): Remove dependency on
	libtool, this test is a primary source and not generated.

	Bump copyright years in manual.
	* doc/libtool.texi: Bump copyright years.

2010-08-13  Peter Rosin  <peda@lysator.liu.se>

	Allow the use of a listing file if the archiver supports it.
	* libltdl/m4/libtool.m4 (_LT_CMD_OLD_ARCHIVE): Move detection
	of a suitable archiver...
	(_LT_PROG_AR): ...to here. New macro, also detect if the
	archiver supports a listing file with the new variable
	archiver_list_spec.
	* libltdl/config/ltmain.m4sh: If the archiver supports a listing
	file, use it when max_cmd_len is exceeded.  This is needed for
	tool chains such as MSVC which do not support piece by piece
	linking (-r -o).
	* doc/libtool.texi (libtool script contents): Update with
	archiver_list_spec description.

2010-08-10  Gary V. Vaughan  <gary@gnu.org>  (tiny change)

	Make testsuite compatible with Autoconf 2.62 again.
	* tests/getopt-m4sh.at (AT_CHECK): Autotest 2.62 chokes on unquoted
	'#' in AT_CHECK, so replace all uses with '@%:@' quadrigraph.
	Suggested by Eric Blake <eblake@redhat.com>
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

2010-08-09  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix more problematic code from "Add func_append_quoted and do..."
	* libltdl/config/ltmain.m4sh (func_mode_link): Revert back
	func_append instances that as assignments relied on the shell
	not performing word splitting on the right hand side of the
	assignment.

	Fix another typo on "Add func_append_quoted and do..."
	* libltdl/config/ltmain.m4sh (func_mode_link): Fix regression in
	computation of finalize_rpath introduced in v2.2.10-40-g0da7d80,
	fixing several testsuite failures on AIX.
	Report by Rainer Tammer.

2010-08-07  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Avoid unwanted error message in configure output.
	* libltdl/m4/libtool.m4 (_LT_PROG_ECHO_BACKSLASH): Try print
	in subshell, so eventual `print: not found' is hidden reliably.

	Fix compilation of program sources on AIX.
	* tests/lt_dlopenext.at (lt_dlopenext error messages): Do not
	use $LIBTOOL when compiling plain object, AIX by default does
	not enable static archives.
	* tests/ltdl-libdir.at (libdir of installed modules): Likewise.
	Report by Rainer Tammer.

	Do not call toplevel configure in non-VPATH build.
	* tests/deplibs-mingw.at (deplibs without file command): Use
	LT_AT_CONFIGURE for consistency, update comment about why it
	might fail.
	* tests/pic_flag.at (override pic_flag at configure time): Skip
	test if we are building in-tree.
	Report by Rainer Tammer.

	Allow running pic_flag test with different shell.
	* tests/testsuite.at (LT_AT_CONFIGURE): Accept optional second
	argument specifying the configure script to run.
	* tests/pic_flag.at (override pic_flag at configure time):
	Use LT_AT_CONFIGURE.

	Ensure not to reverse preserving of --debug for relinking/finish.
	* libltdl/config/ltmain.m4sh (func_check_version_match): Only
	preserve '--debug' switch if $opt_debug is not equal to ':'.
	* tests/help.at (debug tracing): New test group.
	Report by Rainer Tammer.

2010-08-06  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix AC_NO_EXECUTABLES test failure on AIX.
	* libltdl/m4/libtool.m4 (_LT_SYS_MODULE_PATH_AIX): Wrap link
	test in AC_CACHE_VAL, using cache variable $lt_cv_aix_libpath.
	* tests/no-executables.at (AC_NO_EXECUTABLES): Preset it, to
	avoid link test.
	Bug report by Rainer Tammer.

	Fix ltdl-libdir test for C++ compilers.
	* tests/ltdl-libdir.at (libdir of installed modules): Declare
	module function as extern "C".

2010-08-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Let `libtool' without arguments point to `--help' again.
	* libltdl/config/ltmain.m4sh (func_check_version_match):
	Remove duplicate and wrong error check.
	* tests/help.at (standard command line options): Extend test.
	Report by Rainer Tammer.

	Avoid syntax error due to shift of nonexistent parameter.
	* libltdl/config/ltmain.m4sh <command-line handling>: Only shift
	if there is a positional parameter to shift.  Fixes `libtool
	--help' when dash is used.
	Report by Rainer Tammer.

	Fix testsuite errors due to shell quoted parameter expansion issue.
	* tests/getopt-m4sh.at (_LT_AT_GETOPT_M4SH_SETUP): Insert space
	between double-quoted and unquoted shell parameter, as bash
	4.0.28 doesn't add one in its output if the expansion of the
	second one starts with a space.
	(short option splitting, enhanced shell short option splitting)
	(long option splitting, XSI long option splitting): Add space in
	expected output.
	Fixes testsuite failures on AIX, FreeBSD, etc.
	Report by Rainer Tammer.

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

	Fix build failure with AIX sh due to shell quoting error.
	* libltdl/config/ltmain.m4sh (func_append_quoted): Document
	that this function inserts a separator space.
	(func_mode_compile): Do not pass extra space here.
	Fixes regression introduced in v2.2.10-49-gc13532a.
	Report by Rainer Tammer.

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

	Fix pic_flag test unportabilities.
	* tests/pic_flag.at (override pic_flag at configure time): Skip
	test if the compiler produces a warning containing `fpic'.
	Do not use nonportable `grep -e', for Solaris.
	Report by Charles Wilson.

2010-08-01  Paolo Bonzini  <bonzini@gnu.org>

	Fix bug in postdeps computation
	* libltdl/m4/libtool.m4 (_LT_SYS_HIDDEN_LIBDEPS): Actually
	concatenate $prev and $p.

2010-07-26  Charles Wilson  <libtool@cwilson.fastmail.fm>

	Don't always skip XSI tests
	* tests/getopt-m4sh.at: Use new signature as implemented by
	de8a0992b21b76a13c302cf48588ad5f6042595c, when determining
	whether to test Extended-shell functions.

2010-07-18  Peter Rosin  <peda@lysator.liu.se>

	* tests/stresstest.at: Link with main.lo when liba is shared
	and linking main with -no-install.

2010-07-18  Peter Rosin  <peda@lysator.liu.se>

	* tests/stresstest.at [MSVC]: dllimport all imported
	variables.

2010-07-17  Peter Rosin  <peda@lysator.liu.se>

	dllimport the variable for MSVC in link-order.at
	* tests/link-order.at [MSVC]: Makes the test pass by dllimporting
	imported variables when working with shared libraries.

2010-07-08  Peter Rosin  <peda@lysator.liu.se>
	    Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Make preloading heed libname_spec.
	Fixes testsuite failure for lt_dladvise.at on MSYS/MSVC.
	* libltdl/ltdl.c (libprefix): New static variable describing
	the prefix of static archives.
	(try_dlopen): Use libprefix.
	* libltdl/m4/ltdl.m4 (_LTDL_SETUP): Export prefix of static
	archives to config.h. Also fix assignment of LTDLOPEN to be more
	efficient and less error prone while at it.

2010-07-08  Gary V. Vaughan  <gary@gnu.org>

	Rename _LT_PROG_XSI_REPLACE macro to _LT_PROG_FUNCTION_REPLACE.
	* libltdl/m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Rename to
	_LT_PROG_REPLACE_SHELLFNS.
	(_LT_PROG_XSI_REPLACE): Rename to _LT_PROG_FUNCTION_REPLACE.
	(_LT_PROG_FUNCTION_REPLACE): Change decorator comment to use
	'Extended shell' rather than 'XSI' on successful replacement.
	* libltdl/config/general.m4sh (func_dirname, func_basename)
	(func_dirname_and_basename, func_stripname): Change decorator
	comment to use 'extended shell' rather than 'XSI' on fallback
	implementations.
	* libltdl/config/getopt.m4sh (func_split_short_opt)
	(func_split_long_opt): Ditto.
	* libltdl/config/ltmain.m4sh (func_append, func_append_quoted)
	(func_arith, func_len, func_lo2o, func_xform): Ditto.
	* tests/getopt-m4sh.at (_LT_AT_XSI_FUNC_EXTRACT): Rename to
	_LT_AT_EXTENDED_SHELL_FUNC_EXTRACT.
	(_LT_AT_EXTENDED_SHELL_FUNC_EXTRACT): Change regular expression to
	match new replacable function decorator comments.

2010-07-08  Peter Rosin  <peda@lysator.liu.se>

	Optimize assignment of output_la.
	* libltdl/config/ltmain.m4sh (func_mode_link): Save two fork/exec
	instances.
	Report by Ralf Wildenhues.

2010-07-08  Gary V. Vaughan  <gary@gnu.org>

	Fix a cut-n-pasto in "2010-07-07 Charles Wilson" patch.
	* libltdl/config/ltmain.m4sh (func_mode_link): Remove spurious
	variable dereference.

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

	Tidy m4 comment header underline.
	* libltdl/m4/libtool.m4 (_LT_CHECK_SHAREDLIB_FROM_LINKLIB): Make
	sure hyphens in function name comment header underline line up.

2010-07-07  Charles Wilson  <libtool@cwilson.fastmail.fm>

	[cygwin|mingw] fix dlpreopen with --disable-static
	* libltdl/config/general.m4sh (func_tr_sh): New function.
	* libltdl/config/ltmain.m4sh (func_generate_dlsyms) [cygwin|mingw]:
	Obtain DLL name corresponding to import library by using value
	stored in unique variable libfile_$(transliterated implib name).
	If that fails, use $sharedlib_from_linklib_cmd to extract DLL
	name from import library directly. Also, properly extract dlsyms
	from the import library.
	(func_mode_link) [cygwin|mingw]: Prefer to dlpreopen DLLs
	over static libs when both are available.  When dlpreopening
	DLLs, use linklib (that is, import lib) as dlpreopen file,
	rather than DLL. Store name of associated la file in
	unique variable libfile_$(transliterated implib name)
	for later use.
	(func_win32_libid): Accomodate pei-i386 import libs
	as well as pe-i386.
	(func_cygming_dll_for_implib): New function.
	(func_cygming_dll_for_implib_fallback): New function.
	(func_cygming_dll_for_implib_fallback_core): New function.
	(func_cygming_gnu_implib_p): New function.
	(func_cygming_ms_implib_p): New function.
	* libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Adjust sed
	expressions for lt_cv_sys_global_symbol_to_c_name_address and
	lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
	as trailing space after module name is optional.
	(_LT_LINKER_SHLIBS) [cygwin|mingw][C++]:
	Set exclude_expsyms correctly for $host. Simplify regular
	expression in export_symbols_cmds.
	(_LT_LINKER_SHLIBS) [cygwin|mingw|pw32][C]: Set exclude_expsyms
	correctly for $host. Enable export_symbols_cmds to identify
	DATA exports by _nm_ prefix.
	(_LT_CHECK_SHAREDLIB_FROM_LINKLIB): New macro sets
	sharedlib_from_linklib_cmd variable.
	(_LT_DECL_DLLTOOL): New macro ensures DLLTOOL is always set.

2010-07-05  Peter Rosin  <peda@lysator.liu.se>

	* tests/export.at [MSVC]: dllimport all imported variables.

2010-07-01  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
	    Peter Rosin  <peda@lysator.liu.se>

	Support for response files with $NM.
	* libltdl/m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS)
	<nm_file_list_spec>: New tag variable. Set it to '@' if input
	files can be passed to $NM in a file named with the '@' option.
	* libltdl/config/ltmain.m4sh (func_mode_link): When
	nm_file_list_spec is nonempty, use it to avoid skipped_export.
	* doc/libtool.texi (libtool script contents): Document
	new variable.

2010-07-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix ccache test for MSVC.
	* tests/static.at (ccache -all-static): Ignore compiler stderr.
	Reported by Peter Rosin.

2010-07-03  Charles Wilson  <libtool@cwilson.fastmail.fm>

	Avoid false failures caused by filesystem interaction
	* tests/dlloader-api.at (dlloader API): Use uglified names for
	pseudo-modules.

2010-07-03  Peter Rosin  <peda@lysator.liu.se>

	Fix typo in "Add func_append_quoted and do..."
	* libltdl/config/ltmain.m4sh (func_mode_compile): Use
	func_append_quoted instead of func_append.

2010-07-02  Peter Rosin  <peda@lysator.liu.se>

	Don't trigger file name expansion when embedding manifests.
	* libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS)
	[ cygwin, mingw, cegcc ] <cl*>: Remove all spaces in the
	case statement of postlink_cmds to make file name expansion
	more unlikely.
	(_LT_LANG_CXX_CONFIG): Likewise, but also add the missing |.

2010-07-01  Peter Rosin  <peda@lysator.liu.se>

	Fix regression caused by "Add func_append_quoted and do..."
	* libltdl/config/ltmain.m4sh (func_mode_link): Remove leftover
	"_libs" trash.

2010-06-28  Peter Rosin  <peda@lysator.liu.se>

	For MSVC, embed the manifest as a resource in the executable.
	Fixes a lot of testsuite failures with MSVC 2003 (v8.0) and
	above (and perhaps also MSVC .Net) related to running programs
	that have been moved (e.g. installed) without their manifests
	also having been moved.
	* libltdl/m4/libtool.m4 (_LT_PATH_MANIFEST_TOOL): New macro
	that locates the Manifest Tool (mt) and verifies that it is
	indeed the manifest tool. The result is stored in the new
	variable MANIFEST_TOOL.
	(_LT_LINKER_SHLIBS) <postlink_cmds>: New tag variable.
	[ cygwin, mingw, cegcc ] <cl*>: Embed the manifest file as a
	resource. Make sure the embedding work regardless of if the
	@OUTPUT@ file name includes a trailing $EXEEXT.
	(_LT_LANG_CXX_CONFIG): Likewise.
	(_LT_LINKER_SHLIBS, _LT_LANG_CXX_CONFIG): Require the above
	_LT_PATH_MANIFEST_TOOL.
	* libltdl/config/ltmain.m4sh (func_mode_link): After linking
	a program, replace @OUTPUT@ in $postlink_cmds and then execute
	the commands.
	* doc/libtool.texi (libtool script contents): Document
	new postlink_cmds variable.
	(LT_INIT): Add that the MANIFEST_TOOL environment variable can
	be used to override the manifest tool to use.
	* tests/exeext.at: New. Make sure linking with both -o prog
	and -o prog$EXEEXT works.
	* Makefile.am (TESTSUITE_AT): Update.
	(TESTS_ENVIRONMENT): Propagate $(MANIFEST_TOOL) to the
	testsuite.
	* NEWS: Add note of the new MANIFEST_TOOL environment variable.

2010-06-24  Peter Rosin  <peda@lysator.liu.se>

	Add MSVC support.
	* libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER)
	(_LT_LINKER_SHLIBS, _LT_LANG_CXX_CONFIG) [mingw, cygwin]: Add
	support for the Microsoft C/C++ Compiler (cl) relying on help
	from the compile script in Automake.
	* NEWS: Add note of the above.

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

	Skip `enhanced shell option appending' test when not available.
	* tests/getopt-m4sh.at [enhanced shell option appending]:
	_LT_AT_XSI_FUNC_EXTRACT will not be able to find the enhanced
	libtool func_append function if the replacement wasn't substituted
	by configure, since the decorator comments will be different - in
	that case simply skip the test.

2010-06-30  Gary V. Vaughan  <gary@gnu.org>

	Add func_append test cases for smart and retarded implementations.
	* tests/getopt-m4sh.at (_LT_AT_FALLBACK_FUNC_EXTRACT): New
	macro to extract a fallback function implementation from
	ltmain.m4sh.
	[option appending]: Use it for a test of the fallback
	implementation of func_append.
	[enhanced shell option appending]: And also test the enhanced
	implementation.
	* libltdl/config/ltmain.m4sh (func_append_quoted): Fix missing \\
	to escape a quoted space for eval.
	* libltdl/m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Fix missing $ in
	dereference of func_append inline replacement for retarded
	shells.

2010-06-29  Gary V. Vaughan  <gary@gnu.org>

	Correct func_split_short_opt comment cut-n-pasto.
	* libtool/config/getopt.m4sh (func_split_short_opt): Fix
	the function comment.

	Use a real XSI compliant func_split_short_opt substitution.
	* libtool/m4/libtool.m4 (_LT_CHECK_SHELL_FEATURES): Remove
	test ${foo:n:m} substrings, instead adding a ${foo%??} check
	to the existing XSI tests.
	(_LT_PROG_XSI_SHELLFNS): Remove the ${foo:n:m} based
	func_split_short_opt substitution in favour of a properly
	XSI compliant substitution.
	Suggested by Paolo Bonzini.

2010-06-28  Gary V. Vaughan  <gary@gnu.org>

	Add func_append_quoted and do inline func_append substitutions.
	* libtool/config/ltmain.m4sh: Replace all occurrences of
	`foo="$foo bar"' with func_append. No decorator comment was
	added since /func_append [a-zA-Z0-9_]* "/ is already an
	excellent match regexp, and additional comments would only
	complicate things.
	(func_append_quoted): New function that quotes a value with
	func_quote_for_eval before appending it.  To avoid quoting the
	whitespace in the passed value, a single whitespace is added
	automatically.  Changed callers where possible.
	* libtool/m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Perform a
	`+=' implementation substitution for func_append_quoted.  More
	importantly, systematically replace matching func_append calls
	with inline `+=' when supported (for maximum speed), and
	longhand `foo="$foo bar"' otherwise to avoid the function
	overhead.

	Add an XSI replacement for func_split_short_opt, with test cases.
	* libltdl/config/getopt.m4sh (m4go_shortnoargs): Remove 'v' now
	that getopt.m4sh doesn't steal that letter for the --version
	short option.
	* libltdl/config/ltmain.m4sh (M4SH_GETOPTS): We can now use 'v'
	as a short option for '--verbose'.
	* libltdl/config/getopt.m4sh (m4go_printopts): Add back in the
	leading '-' for remaining non-argument short options.
	(func_split_short_opt): Use the correct sed script variable.
	* libltdl/m4/libtool.m4 (_LT_CHECK_SHELL_FEATURES): Also ensure
	that XSI substring extraction is supported.
	(_LT_PROG_XSI_SHELLFNS): Use XSI substring extraction to split
	short options to avoid unnecessary forks if the host shell
	supports that.
	* tests/getopt-m4sh.at: New tests for getopt.m4sh coverage.
	* Makefile.am (TESTSUITE_AT): Add getopt-m4sh.at.
	(TESTS_ENVIRONMENT): Pass M4SH and SED for substition into the
	m4sh expansion performed in tests/getopt-m4sh.at.

2010-06-27  Gary V. Vaughan  <gary@gnu.org>

	Add missing case branch terminators.
	* libltdl/config/ltmain.m4sh: Fixed everal case branches with
	missing ';;' terminators.

	Use TAB-SPACE in preference to SPACE-TAB.
	* libltdl/m4/libtool.m4 (_LT_PROG_XSI_REPLACE): Some editors
	might optimise away the SPACE in SPACE-TAB sequences, so use
	TAB-SPACE just in case.
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

	Amend a missed opt_mode rename instance in ltmain.m4sh.
	* libltdl/config/ltmain.m4sh <mode>: Rename to opt_mode.

	Fix portability regressions in today's earlier changeset.
	* libltdl/m4/libtool.m4 (_LT_PROG_XSI_REPLACE): `sed -i' is not
	portable; use `mv -f ...|| cp -f ...' instead.
	Add an initial backslash to sed `c' substitutions with leading
	whitespace, so that indentation is not removed by some non-POSIX
	compliant sed implementations.
	(_LT_PROG_XSI_SHELLFNS): Display a diagnostic warning message if
	one or more XSI function replacements failed.

	getopt.m4sh generated libtool option parser, and XSI improvements.
	* libltdl/m4/libtool.m4 (_LT_PROG_XSI_SHELLFNS): Moved portable
	shell versions of various utility functions from here...
	* libltdl/config/getopt.m4sh (func_split_long_opt): ...to here...
	* libltdl/config/general.m4sh (func_dirname, func_basename)
	(func_dirname_and_basename, func_strip_name): ...here...
	* libltdl/config/ltmain.m4sh (func_append, func_arith, func_len)
	(func_lo2o, func_xform): ...and here.
	* libltdl/config/libtool.m4 (_LT_PROG_XSI_REPLACE): New macro that
	expands into a sed command for replacing the contents of a
	suitably decorated shell function with an alternate XSI
	implementation.
	(_LT_PROG_XSI_SHELLFNS): Use it to replace the portable shell
	versions of the functions above with equivalent XSI
	implementations that avoid unnecessary forks if the host shell
	supports that.
	* libltdl/config/ltmain.m4sh: Replace hand written shell code
	with a call to M4SH_GETOPTS. Rename some option variables in
	the client code to match the generated option parser settings.
	* libltdl/config/general.m4sh (func_echo, func_error)
	(func_warning): Use $opt_mode instead of obsoleted $mode in
	message leader.
	* libltdl/config/getopt.m4sh (m4_version_prereq): This file
	requires m4sugar.m4 from Autoconf-2.61 or newer. 

2010-06-24  Charles Wilson  <libtool@cwilson.fastmail.fm>

	[cygwin] Refactor C++ exception handling for Win32 correctness
	* tests/exception.at (common.h): New file, refactored from
	(module.h): Move declaration of modexc to libcommon.
	Include common.h. Use explicit import/export markings for
	symbols when building on win32 or cygwin.
	(common.cpp): New file.
	(module.cpp): Ensure correct symbols markings when including
	module.h.
	(lib.h): Use explicit import/export markings for symbols
	when building on win32 or cygwin.
	(lib.cpp): Ensure correct symbol markings when including lib.h.
	(main.cpp): Include common.h.
	(commands): Ensure correct symbol markings when compiling
	main.cpp, and lib.cpp, and module.cpp. Add command to compile
	common.cpp, and to link libcommon.la.  Add libcommon.la when
	linking module.la and main.  Add command to install libcommon.la.

2010-06-21  Gary V. Vaughan  <gary@gnu.org>

	Ensure getopts.m4sh is compatible with Autoconf-2.61 and newer.
	* libltdl/config/getopt.m4sh (m4_chomp): Ensure this macro is
	implemented even if Autoconf's m4sugar.m4 doesn't provide it.
	(m4go_expand): New macro based on Autoconf-2.64 m4_expand. Use
	it everywhere incase m4sugar.m4 doesn't have an implementation.
	(m4_ifnblank): Replace all uses with m4_ifval, which was
	available long before m4_ifnblank was introduced.

2010-06-20  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix clean mode for HP-UX 11.31 sh.
	* libltdl/config/ltmain.m4sh (func_mode_uninstall): Do not try
	to match a null string in a case pattern, even with surrounding
	spaces.  Fixes `lt_dlopenadvise library loading' test.

	Add comment for exception handling module unloading issue.
	* tests/exceptions.at (C++ exception handling): Add comment
	for last patch.

	Fix flags test failure when ld is used as linker.
	* tests/flags.at (passing CC flags through libtool): When $LD
	is used for linking libraries, ensure flags passed with `-Wc,'
	are not passed through to $LD, but flags passed with `-Wl,' use
	$wl when linking programs.  Fixed testsuite failure on HP-UX
	10.20.

2010-06-19  Charles Wilson  <libtool@cwilson.fastmail.fm>

	[cygwin] Fix segfault in C++ exception handling test
	* tests/exceptions.at (main.cpp:exceptions_in_module):
	Move dlclose outside catch block; otherwise __cxa_end_catch
	(part of the cygwin g++ ABI) accesses pointers to data inside
	unloaded DLL. This is a platform ABI-specific bug, but is
	likely common to many platforms' g++ and/or other C++
	compilers.

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

	Fix srcdir computation for manual runs of old tests.
	* tests/defs.m4sh: Strip trailing `/tests' from srcdir, to allow
	`$srcdir/tests/FOO.test' to be run from the top build directory.

	Clean up @var handling in the manual.
	* doc/libtool.texi: Throughout the manual, replace @var with
	@samp or @code as appropriate, ensure the argument of remaining
	@var uses are lower-case.

	Let the bootstrap script fail upon errors.
	* bootstrap: Enable errexit.

	Fix execute mode test for OSF/1 5.1.
	* tests/execute-mode.at (execute mode): Do not use grep -F
	with an empty pattern.
	* THANKS: Update.
	Report by Jay K.

	Use config.cache variable for PIC flag, to allow override.
	* libltdl/m4/libtool.m4 (_LT_COMPILER_PIC) <lt_prog_compiler_pic>:
	Save result, and allow override, through cache variable
	lt_cv_prog_compiler_pic{,_CXX,_F77,_FC}.  The cache variable
	needs to contain an eventual -DPIC.
	* tests/pic_flag.at (override pic_flag at configure time):
	New file, new test.
	* Makefile.am (TESTSUITE_AT): Update.
	* NEWS, THANKS: Update.
	Suggestion by Joakim Tjernlund and Paolo Bonzini.

2010-06-16  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Optimize func_ltwrapper_scriptname to assume a cwrapper.
	* libltdl/config/ltmain.m4sh (func_ltwrapper_scriptname): Do not
	call func_ltwrapper_executable_p again here, this function is
	documented to allow being called with wrapper executables.

	Fix bootstrap script to cope with changed AC_INIT arguments.
	* bootstrap: When extracting PACKAGE and VERSION from AC_INIT
	arguments, be sure to remove a 'GNU ' prefix and lowercase the
	package name for PACKAGE.  Also set PACKAGE_NAME and PACKAGE_URL
	appropriately for GNU software.  Pass these variables to the
	make commands creating tests/package.m4 and other files.
	* Makefile.am (edit): Fix substitution of PACKAGE_NAME and
	PACKAGE_STRING.
	* libltdl/config/announce-gen.m4sh: Use @PACKAGE@ not
	@PACKAGE_STRING@.

2010-06-15  Peter Rosin  <peda@lysator.liu.se>

	On Windows, find potential libs regardless of file name case.
	* libltdl/m4/libtool.m4 (_LT_CHECK_MAGIC_METHOD),
	libltdl/config/ltmain.m4sh (func_mode_link): On Windows,
	find potential libs regardless of file name case.
	* tests/nocase.at: New test, to check for regressions
	of the above.
	* Makefile.am: Add above new test.
	* doc/libtool.texi (libtool script contents): Document
	new variables.
	* NEWS: Updated.

2010-06-15  Philip Allison  <philip.allison@smoothwall.net>  (tiny change)

	Avoid GCC -Wall compiler warning in dlopen self test.
	* libltdl/m4/libtool.m4 (_LT_TRY_DLOPEN_SELF): Fix unused
	variable warning in test program.
	* THANKS: Update.

2010-06-15  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix cleaning of uninstalled w32 shell wrapper in subdirs.
	* libltdl/config/ltmain.m4sh (func_mode_uninstall): Do not
	override global objdir variable, instead use odir for the
	directory of to-be-removed files.  Drop unneeded origobjdir.
	Report by Charles Wilson.

2010-06-14  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Enable colored Autotest testsuite output if available.
	* tests/testsuite.at: Move AT_INIT call down to late in the
	file, all prior code can go beforehand.
	Call AT_COLOR_TESTS if defined.

2010-06-14  Peter O'Gorman  <peter@pogma.com>

	Pass resident test with --disable-shared too.
	* tests/resident.at: use LTDL_SET_PRELOADED_SYMBOLS.

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

	Test with --disable-shared at release time too.
	* HACKING: Note it.

	Avoid failure for --disable-shared.
	* tests/lt_dladvise.at: Hack.

	Use LTDL_SET_PRELOADED_SYMBOLS to avoid failure.
	* tests/exceptions.at: Use it.

2010-06-13  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Print Libtool project URL in program --help output.
	* configure.ac (AC_INIT): Set PACKAGE argument to `GNU Libtool',
	so Autoconf knows this is GNU software.  For Autoconf < 2.64,
	if AC_PACKAGE_URL is not defined, substitute PACKAGE_URL.
	* Makefile.am (edit): Substitute PACKAGE_URL.
	($(srcdir)/tests/package.m4): Also depend on Makefile.am.
	Define AT_PACKAGE_URL, for `tests/testsuite --help' output.
	* libltdl/config/getopt.m4sh (func_help): Also extract comment
	lines that mention a home page and general GNU help.
	* libltdl/config/ltmain.m4sh: Use @PACKAGE_BUGREPORT@ instead of
	hard-coded list address.  Also mention Libtool home page and
	general GNU help web page.
	* libtoolize.m4sh: Likewise.

2010-06-12  Peter Rosin  <peda@lysator.liu.se>
	    Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Improve libdir usage from within ltdl on MinGW.
	* libltdl/ltdl.c (parse_dotla_file) [__WINDOWS__]: Read the
	libdir entry in the .la file, but accept it only if it is not
	a unix-style absolute name.
	* tests/ltdl-libdir.at: New test that checks if ltdl finds an
	installed module via the libdir variable in the .la file.  On
	MinGW, use a Windows-style libdir name including drive spec.
	* Makefile.am: Add above.

2010-06-11  Peter O'Gorman  <peter@pogma.com>

	Skip bindir install test if we're not building shared.
	* tests/bindir.at: Skip install test if necessary.
	* THANKS: Update.
	Report by Michael E Faenza.

2010-06-11  Gary V. Vaughan  <gary@gnu.org>

	Use getopt.m4sh to generate libtoolize option parser.
	* libtoolize.m4sh: Replace hand written shell code with a
	call to M4SH_GETOPTS.  Move some premature initialization
	from the preamble to the main part of the script.  Exit with
	an error on spurious additional non-option arguments.
	(envopts): Integrate LIBTOOLIZE_OPTIONS pre-parsing into the
	main option parsing loop.
	(opt_copy): Use in place of and in the reverse sense of the
	old opt_link variable.

2010-06-10  Peter O'Gorman  <peter@pogma.com>

	Create reloadable object files with non-pic objects too.
	* libltdl/config/ltmain.m4sh: When not building a shared
	library, use the non-pic objects to create a reloadable
	object, because pic objects do not exist.

2010-06-10  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Ensure libltdl is up to date for check-local.
	* Makefile.am (LTDL_BOOTSTRAP_DEPS): New variable.
	(all-local): Use it to simplify dependencies.
	(testsuite_deps_uninstalled): Add $(LTDL_BOOTSTRAP_DEPS).
	Report by Peter Rosin.

2010-06-10  Gary V. Vaughan  <gary@gnu.org>

	Support shell tracing inside functions even with ksh.
	* libltdl/config/getopt.m4sh: Set $opt_debug to be either `:'
	or `set -x' depending on whether --debug was parsed to match
	usage in libtoolize.m4sh and ltmain.m4sh.
	* clcommit.m4sh, libltdl/config/announce-gen.sh: Instead of
	`$opt_debug && ...', use `test "$opt_debug" != ":" && ...'.
	* clcommit.m4sh, libltdl/config/announce-gen.m4sh,
	libltdl/config/getopt.m4sh, libltdl/connfig/mailnotify.m4sh:
	Execute at the start of functions to cater to ksh, which
	resets `-x' inside shell functions.

	Fix a typu in HACKING.
	* HACKING (Release Procedure): s/Makeflie/Makefile/.

2010-06-09  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Factorize testing gcj installation in the testsuite.
	* tests/testsuite.at (LT_AT_TAG): For the GCJ tag, actually
	try to compile a .java file when deciding whether to skip.
	(LT_AT_EXEC_TAG): New macro, to also ensure runnability.
	* tests/convenience.at (Java convenience archives): Use
	LT_AT_EXEC_TAG, simplify accordingly.
	* tests/flags.at (passing lt_tag flags through libtool): Use
	m4_defn for tag so LT_AT_TAG works.
	* tests/infer-tag.at (GCJ inferred tag): Simplify.
	* THANKS: Update.
	Report by Warren Dodge.

2010-06-09  Peter O'Gorman  <peter@pogma.com>

	Skip demo-nopic tests if SELinux policy will cause failure.
	* tests/demo-nopic.test: Check SELinux policy and skip if
	necessary.

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

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

	GNU Libtool 2.2.10 was released.

	Prepare for next release.
	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version number
	to 2.2.10.
	* NEWS: Update version number.

	Fix a quoting bug with ./commit -a 'A U Thor'.
	* clcommit.m4sh (func_commit): Use func_show_eval when calling
	git, so that the previously func_quote_for_eval()ed $git_flags is
	expanded properly.

2009-09-15  Peter Rosin  <peda@lysator.liu.se>

	Don't try the MSYS libdir path on MinGW.
	* libltdl/ltdl.c (parse_dotla_file) [mingw]: The absolute
	libdir path in the .la file is recorded as an MSYS (POSIX
	style) path. Make sure it isn't tried when locating the
	shared library.
	* NEWS: Updated.

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

	Simplify license variations, and add missing license texts.
	* ChangeLog, ChangeLog.1996, ChangeLog.1997, ChangeLog.1998,
	ChangeLog.1999, ChangeLog.2000, ChangeLog.2001, ChangeLog.2002,
	ChangeLog.2003, ChangeLog.2004, ChangeLog.2005, ChangeLog.2006,
	ChangeLog.2007, ChangeLog.2008, ChangeLog.2009, NEWS: Add
	all-permissive license.
	* HACKING, README, README.alpha, TODO: Relax license to RMS
	encouraged all-permissive terms.
	* libltdl/README: Ditto. I added the original license text in
	2007, and there's no need for it to be so long for such a trivial
	file.
	* libltdl/config/getopt.m4sh, libltdl/general.m4sh: Cvs-utils is
	dead, and I am the author of these files, so consolidated license
	terms to match regular Libtool licensing.
	* HACKING (Licensing Rules): Update wording, and list of files for
	the all permissive license.
	(GPL with CVS-Utils exception clause): Removed.  No files have these 
	license any more.
	(GPL with Libtool exception clause): Ditto, only libltdl/README
	used to be distributed with this variation.
	* AUTHORS: Add GPL license text.
	
	Fix a type in the 2.2.8 release notes.
	* NEWS: s/ romoted/ promoted/ in the 2.2.8 release notes.

	Don't warn about the blank line inserted into git commit message.
	* clcommit.m4sh: When searching for accidental commits of mutliple
	changes, ignore the second line of the message, which we inserted
	earlier to support "git log --oneline".

	Enable correct extraction of multiline copyright from --version.
	* libltdl/config/getopt.m4sh: Wrap copyright notice at 76
	columns.
	(func_version): Don't omit spaces when merging multiline copyright
	notices.
	* clcommit.m4sh, libtoolize.m4sh: Wrap copyright notice at 76
	columns.

	* NEWS (2.2.8): BlueGene compiler tests were performed on BG/P
	systems, not BG/L.
	Reported by Christian Rössel <christian.roessel@gmx.de>

2010-06-08  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix testsuite helper macros to not hide failure.
	* tests/testsuite.at (LT_AT_CONFIGURE, LT_AT_MAKE):
	Do not wrap AT_CHECK in a subshell, so that failures are
	properly propagated; instead, move environment changes inside
	the AT_CHECK code.
	Report and analysis by Peter Rosin.

	Avoid autom4te warning about unnamed diversion.
	* libltdl/config/getopt.m4sh: Use diversion name KILL not -1.

2010-06-07  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Make versioning test stricter for w32, enable shared libs.
	* tests/versioning.at (versioning): Add -no-undefined to
	LDFLAGS.
	(test_uninstalled): Also move $bindir out of the way
	temporarily.

	Fix versioning test for LDFLAGS=-Wl,--as-needed.
	* tests/versioning.at (versioning): For the library update
	hypotheses, ensure the unchanged library libb isn't accidentally
	relinked against the new liba, by not reinstalling libb.
	Fixes testsuite failure for the incompatible update case with
	LDFLAGS=-Wl,--as-needed.
	* THANKS: Update.
	Report by Ryan Hill.

2010-06-06  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Rewrite manual intro to be gender-neutral.
	* doc/libtool.texi (Introduction): Use gender-neutral
	formulation when addressing developers.

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

	Update and simplify all m4sh scripts to use latest getopt.m4sh.
	* clcommit.m4sh, libltdl/config/mailnotify.m4sh: Rewrite option
	parsing loop over M4SH_GETOPTS macro, and adjust all clients of
	option variables to use generated option names.

	Add missing quote for literal ? in a shell case statement.
	* libltdl/config/getopt.m4sh (m4go_shortnoargs): Quote initial ?
	correctly for use in a shell case statement.

	Quote command line arguments after --rcfile properly.
	* libltdl/config/announce-gen.m4sh (--rcfile): Quote remaining
	arguments shell variable expression correctly for eval.
	
	Shift correctly in numbered option argument collection.
	* libltdl/config/getopt.m4sh (_m4go_option): Argument list also
	needs to be `shift'ed in the shell option loop after processing a
	numbered argument collection.

	Fetch from new upstream host for config.guess and config.sub.
	* Makefile.maint (WGET_CGIT): Location of newest config.guess and
	config.sub upstream.
	(fetch): Fetch config.guess and config.sub from WGET_CGIT, rather
	than no-longer-updating WGET_SGO location.

	Update generated upload directive file format to v1.1.
	* Makefile.maint (git-dist, diffs): Update to generate v1.1 format
	directive files for ftp://ftp-upload.gnu.org/incoming/ftp.

	Fix web manual generation details in release instructions.
	* HACKING (Release Procedure): Move the instruction for generating
	web manuals for a new release to before the instruction that bumps
	the version numbers to the post release values.

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

	GNU Libtool 2.2.8 was released.

	Prepare for next release.
	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.2.8.
	* NEWS: Update version number.
	* INSTALL, libltdl/config/install-sh, libltdl/config/config.guess,
	libltdl/config/config.sub, libltdl/config/texinfo.tex: Updated
	from canonical source.

	Provide an m4sh reimplementation of announce-gen.
	* libltdl/config/getopt.m4sh (M4SH_GETOPTS): New macro that takes
	a quoted m4 list of command line options to be parsed, and
	generates the shell code to parse those options and collect the
	results into appropriately named 'opt_xxx' shell variables.  Also,
	add some private supporting macros, and improve the comments
	radically.
	* libltdl/config/announce-gen.m4sh: New file, to generate and
	optionally post (an enhancement over the gnulib perl script of the
	same name) a release announcement.
	* Makefile.maint (announce-gen): Build a new announce-gen script
	in the build directory, from the contents of
	libltdl/config/announce-gen.m4sh.
	* HACKING (Release Procedure): Update the instructions to use
	announce-gen.
	(Alpha release note template, Full release note template):
	Removed.

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

	Support "git log --oneline" in generated commit messages.
	* clcommit.m4sh (func_check_commit_msg): Insert an empty line
	between the ChangeLog entry summary line and the ChangeLog entry
	body, so that "git log --oneline" works properly.
	Bump copyright and version number.
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

2010-05-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* HACKING: Set Reply-To: in announcement emails.

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

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

	GNU Libtool 2.2.7b  was released.

	Prepare for next release candidate.
	* configure.ac, libltdl/configure.ac (AC_INIT): Bump version
	number to 2.2.7b.
	* libltdl/m4/libtool.m4, libltdl/m4/ltdl.m4,
	libltdl/m4/ltoptions.m4, libltdl/m4/lt~obsolete.m4: These files
	have been updated without a serial bump since the last release.
	* libltdl/Makefile.inc (LTDL_VERSION_INFO): Bump Revision, to
	account for bugfixes since the last release.
	* libltdl/config/install-sh, libltdl/config/config.guess,
	libltdl/config/config.sub, libltdl/config/texinfo.tex,
	INSTALL: Updated from canonical source.
	* NEWS: Update with missing entries from ChangeLog.
	* HACKING: Note workaround for developer tool-path leakage bug.

	Skip some tests in --disable-ltdl-install mode.
	* tests/dlloader-api.at, tests/exceptions.at,
	tests/lalib-syntax.at, tests/loadlibrary.at,
	tests/lt_dlopenext.at, tests/resident.at: Detect when these
	tests try to link against the not installed libltdl.la, and
	skip rather than FAIL.

2010-05-05  Peter Rosin  <peda@lysator.liu.se>

	Clarify versioning algorithm documentation.
	* doc/libtool.texi (Updating version info): Be explicit
	about setting age to zero on interface change.
	Reported by Jef Driesen <jefdriesen@hotmail.com>

2010-05-04  Peter O'Gorman  <peter@pogma.com>

	Ranlib is required with -force_load and fat archives.
	* libltdl/m4/libtool.m4 (_LT_REQUIRED_DARWIN_CHECKS): Run
	ranlib.
	Reported by Jeremy Huddleston <jeremyhu@apple.com>

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

	Fix incompatible struct declarations.
	* doc/libtool.texi (Dlpreopening): Remove broken documentation
	of lt_dlsymbol and lt_dlsymlist.  Document typedef lt_dlsymlist
	and symbol lt_preloaded_symbols according to the implementation.
	* tests/demo/dlmain.c (lt_symlist): Make struct anonymous ...
	(lt_dlsymlist): ... and typedef to this name.
	(lt_preloaded_symbols, main): Adjust.
	* tests/pdemo/longer_file_name_dlmain.c: Likewise.

2010-04-04  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Use linker_flags not compiler_flags with $LD.
	* libltdl/m4/libtool.m4 (_LT_LINKER_SHLIBS) [linux]
	<archive_cmds, archive_expsym_cmds>: With xlf and bgxlf
	compilers, when linking with $LD, use $linker_flags not
	$compiler_flags.

2010-03-31  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Add FAQ, and FAQ entry for flags stripped at library link time.
	* doc/libtool.texi (FAQ, Stripped link flags): New nodes.
	(Wrapper executables): Replace bug address with macro.
	(Compile mode, Link mode): Document `-Wc,' and `-Xcompiler '
	semantics better.
	* libltdl/config/ltmain.m4sh (func_mode_link): Rewrite comment
	for the flags that are passed through.
	Prompted by reports from Simon Richter <Simon.Richter@hogyros.de>,
	Török Edwin <edwintorok@gmail.com> and
	Åke Sandgren <ake.sandgren@hpc2n.umu.se>.

2010-03-28  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Fix preloader symbol list declaration in libltdl.
	* libltdl/ltdl.c (preloaded_symbols): Fix declaration to include
	array brackets.
	(lt_dlinit): Do not take address of preloaded_symbols.

	Fix typo in libtool --help output.
	* libltdl/config/ltmain.m4sh (func_mode_help): Fix typo in help
	output.

	Fix a couple of documentation errors.
	* doc/libtool.texi (Autoconf macros): Improve hyphenation.
	(Using libltdl): libltdl uses the Lesser General Public License,
	not the Library General Public License.

	Do not use @sc nor @acronym in the manual.
	* doc/libtool.texi: Remove all usage of @sc.

2010-03-19  Chris Demetriou  <cgd@google.com>

	Sort output of 'find' to enable deterministic builds.
	* libltdl/config/ltmain.m4sh (func_extract_archives): Sort
	output of 'find'.
	* libltdl/m4/libtool.m4 (_LT_LANG_CXX_CONFIG): Likewise.
	* THANKS: Update.

2010-03-19  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Unconditionally normalize LC_ALL, LANGUAGE in libtool script.
	* libltdl/config/ltmain.m4sh: Unconditionally set LC_ALL and
	LANGUAGE to 'C', to avoid semantic differences on MinGW under
	Chines locale.  SCO issues with e.g. LANG=C are not known to
	be relevant today any more.
	Report by Pete Batard <pbatard@gmail.com> and Xiaofan Chen
	<xiaofanc@gmail.com>.

2010-03-17  Peter Rosin  <peda@lysator.liu.se>

	Preserve the last error when restoring the error mode.
	* libltdl/loaders/loadlibrary.c (wm_open): Don't rely on
	SetThreadErrorMode (or SetErrorMode) to not clobber the last
	error.
	Report by Ralf Wildenhues.

	Use Get/SetThreadErrorMode if they are available.
	* libltdl/loaders/loadlibrary.c (wrap_geterrormode): Replaced...
	(wrap_getthreaderrormode): ...by this function that checks
	first for GetThreadErrorMode, then GetErrorMode and makes use
	of either of those or...
	(fallback_getthreaderrormode): ...else falls back to this
	replacement function that implements the old workaround, which
	was previously implemented in...
	(fallback_geterrormode): ...this now renamed function.
	(geterrormode): Replaced...
	(getthreaderrormode): ...by this function pointer that points
	at either of wrap_getthreaderrormode, GetThreadErrorMode,
	GetErrorMode or fallback_getthreaderrormode.
	(wrap_setthreaderrormode): New function that checks if
	SetThreadErrorMode is supported by the system and makes use of
	it if it is.
	(fallback_setthreaderrormode): New function that is used
	otherwise that implements the old version using SetErrorMode.
	(setthreaderrormode): New function pointer that points at
	either of wrap_setthreaderrormode, SetThreadErrorMode or
	fallback_setthreaderrormode.
	(vm_open): Adjust to the above.

2010-02-28  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Detect Sun compiler suite with 'sun'-prefixed names.
	* libltdl/m4/libtool.m4 (_LT_COMPILER_PIC, _LT_LANG_CXX_CONFIG)
	(_LT_SYS_HIDDEN_LIBDEPS) [solaris]: Accept compiler names sunCC,
	sunf77, sunf90, sunf95 in addition to CC, f77, f90, f95.
	* NEWS: Update.
	Report by Vadim Zeitlin.

2010-02-28  Pierre Ossman  <ossman@ossman.lkpg.cendio.se>  (tiny change)
	    Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

	Fix deplibs check fallback for 64-bit Windows and Windows CE.
	* libltdl/m4/libtool.m4 (_LT_CHECK_MAGIC_METHOD): Accept file formats
	'pe-arm-wince' and 'pe-x86-64'.  Add note about consistency with ...
	* libltdl/config/ltmain.m4sh (func_win32_libid): ... the respective
	pattern here; sync pattern from the former.
	* tests/deplibs-mingw.at (deplibs without file command): New
	file, new test.
	* Makefile.am (TESTSUITE_AT): Update.
	* NEWS: Update.

2010-02-24  Scott McCreary  <scottmc2@gmail.com>  (tiny change)

	Update search path on Haiku for legacy system directory.
	* libltdl/m4/libtool.m4 (_LT_SYS_DYNAMIC_LINKER) [haiku]
	<sys_lib_dlsearch_path_spec>: Replace legacy
	/boot/beos/system/lib directory with /boot/system/lib.
	* THANKS: Update.

2010-02-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	manual: fix detailmenu ordering.
	* doc/libtool.texi (Top): Add section for `Linking executables'
	in the detailmenu.

2010-02-21  Charles Wilson <libtool@cwilson.fastmail.fm>

	Guard against strerror()==NULL
	* libltdl/config/ltmain.m4sh (func_emit_cwrapperexe_src:main):
	Check return value of strerror() using nonnull().
	(func_emit_cwrapperexe_src:find_executable): Ditto.
	(func_emit_cwrapperexe_src:chase_symlinks): Ditto.

2010-02-21  Charles Wilson <libtool@cwilson.fastmail.fm>

	Document wrapper changes.
	* NEWS: Indicate new feature and incompatibility.
	* doc/libtool.texi [detailmenu]: Add reference to subsection
	'Wrapper executables for programs', in Platform Quirks category.
	[Linking executables]: Mention wrapper executables, in
	addition to wrapper scripts. Add menu referencing subsection
	'Wrapper executables for programs'.
	[Wrapper executables for programs]: New subsection. Documents
	cwrapper rationale and command line options.

2010-02-21  Charles Wilson <libtool@cwilson.fastmail.fm>

	Add --lt-* options to shell wrapper
	* libltdl/config/ltmain.m4sh (func_emit_wrapper): Call
	func_parse_lt_options early. Use func_exec_program.
	(func_emit_wrapper:func_parse_lt_options): New function.
	(func_emit_wrapper:func_lt_dump_args): New function.
	(func_emit_wrapper:func_exec_program_core): New function.
	(func_emit_wrapper:func_exec_program): New function.

2010-02-21  Charles Wilson <libtool@cwilson.fastmail.fm>

	Enable runtime cwrapper debugging; add tests
	* libltdl/config/ltmain.m4sh (func_emit_cwrapperexe_src):
	Update comments. Initialize program_name. Eliminate _LENGTH
	variables for string constants. In debug mode, print a
	banner with known content before any other output. Remove
	LTWRAPPER_DEBUGPRINTF macro. Add constants and variables
	to support new --lt-debug option.
	(func_emit_cwrapperexe_src:ltwrapper_debugprintf): Renamed to...
	(func_emit_cwrapperexe_src:lt_debugprintf): this. Only print
	messages if lt_debug != 0. Ensure appearance of messages
	conforms to GCS.
	(func_emit_cwrapperexe_src:lt_fatal): Ditto.
	(func_emit_cwrapperexe_src:lt_error_core): Ditto.
	(func_emit_cwrapperexe_src): Update all callers to lt_fatal.
	Update all users of LTWRAPPER_DEBUGPRINTF (()) to call
	lt_debugprintf () directly.
	(func_emit_cwrapperexe_src:main): Consolidate option parsing.
	Ensure first use of lt_debugprintf occurs after option parsing.
	Add stanza to parse for --lt-debug and set lt_debug variable.
	Use strcmp rather than strncmp, where safe.
	* tests/cwrapper.at: Add new tests for --lt-debug and
	-DLT_DEBUGWRAPPER.

2010-01-31  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Use --email with gendocs.sh.
	* Makefile.maint (web-manual): Pass bug reporting address to
	gendocs.sh.

	Make testsuite code C++ clean again.
	* tests/resident.at (resident modules): Fix for C++.

2010-01-29  Peter Rosin  <peda@lysator.liu.se>
	    Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Testsuite exposure for dlloader API.
	* tests/dlloader-api.at: New file, new test.
	* Makefile.am (TESTSUITE_AT): Update.

2010-01-29  Peter Rosin  <peda@lysator.liu.se>

	* tests/loadlibrary.at: Fix C++ issues.

2010-01-20  Peter Rosin  <peda@lysator.liu.se>

	Report proper errors from the loadlibrary loader.
	* libltdl/loaders/loadlibrary.c (loadlibraryerror): New
	helper function that returns the latest Windows error as a
	string, or the provided default string on failure to do so.
	(LOADLIB_SETERROR): New macro that wraps previous to make it
	easy to use.
	(vm_open, vm_close, vm_sym): Make use of previous.
	(LOCALFREE): New macro to help free the Windows error string.
	(vl_exit): Make use of previous.
	* tests/loadlibarry.at: New file, new test that makes sure
	the loadlibrary loader reports non-standard error messages.
	* Makefile.am (TESTSUITE_AT): Add above test.

2010-01-02  Peter Rosin  <peda@lysator.liu.se>

	Use GetErrorMode if it is available.
	* libltdl/loaders/loadlibrary.c (wrap_geterrormode): New
	function that checks if GetErrorMode is supported by the
	system and makes use of it if it is.
	(fallback_geterrormode): New function that is used otherwise
	that implements the old workaround.
	(geterrormode): New function pointer that points at either
	of the above or directly at GetErrorMode.
	(vm_open): Make use of the above.

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

	Ensure functions from resident modules work in atexit handlers.
	* tests/resident.at (resident modules): New file, new test.
	* Makefile.am (TESTSUITE_AT): Adjust.
	Report by Bob Friesenhahn.

	Testsuite exposure for relative output file names and deplibs.
	* tests/deplib-in-subdir.at (deplib in subdir): New file, new
	test.
	* Makefile.am (TESTSUITE_AT): Update.
	Prompted by report from Bob Friesenhahn.

2010-01-11  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
	    Bob Friesenhahn  <bfriesen@simple.dallas.tx.us>

	Testsuite exposure for C++ exception handling.
	* tests/exceptions.at (C++ exception handling): New file, new
	test.
	* Makefile.am (TESTSUITE_AT): Update.
	Report by Bob Friesenhahn.

2010-01-06  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	Bump copyright years.
	* ChangeLog.2009: New, rotated from ...
	* ChangeLog: ... here.
	* Makefile.am (EXTRA_DIST): Add ChangeLog.2009.
	* NEWS, libltdl/config/ltmain.m4sh: Bump copyright years.
	* libltdl/m4/libtool.m4 (_LT_COPYING, LT_OUTPUT): Likewise.
	* libtoolize.m4sh: Likewise.

Continued in ChangeLog.2009
-- 
  Copyright (C) 1996, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
  2006, 2007, 2008, 2009, 2010 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.

vim:tw=72
