Gary V. Vaughan [Thu, 22 Aug 2013 08:51:33 +0000 (15:51 +0700)]
libltdl: don't trip subdir-objects warning from Automake >= 1.14.
Latest Automake releases now warn when subdir-objects is not
specified in preparation for Automake 2.0. The option has been
in Automake for more than a decade, so there's minimal risk of
someone using the next release of Libtool alongside an ancient
release of Automake when bootstrapping libltdl client projects.
* libltdl/configure.ac (AM_INIT_AUTOMAKE): Add subdir-objects.
Yaakov Selkowitz [Mon, 17 Jun 2013 21:46:54 +0000 (23:46 +0200)]
libtool: fix conversion warnings in cwrapper
build-aux/ltmain.in (func_emit_cwrapperexe_src:main): XMALLOC wants a
size_t. Also use int instead of intptr_t for the return value (which
is fine since the _spawnv call is synchronous).
(func_emit_cwrapper_src) [MSVC]: Remove the intptr_t helper define.
(func_emit_cwrapperexe_src:find_executable): Use size_t for variables
involved in strlen computations.
(func_emit_cwrapperexe_src:lt_setenv): Likewise.
(func_emit_cwrapperexe_src:lt_extend_str): Likewise.
(func_emit_cwrapperexe_src:lt_update_exe_path): Likewise.
THANKS: Update.
Signed-off-by: Yaakov Selkowitz <yselkowitz@users.sourceforge.net> Signed-off-by: Peter Rosin <peda@lysator.liu.se>
Peter Rosin [Sun, 28 Apr 2013 07:16:56 +0000 (09:16 +0200)]
libtool: break all the way out when a good nm is found
The current code tries to locate a compatible nm tool. It starts with
a prefixed nm tool (great!) and includes a plain nm too (that's fine).
The problem is that the code searches for the prefixed nm before the
plain nm (normally fine), but doesn't break once it has found a valid
match, and the plain nm ends up the winner.
Report and analysis by Mike Frysinger.
* m4/libtool.m4 (LT_PATH_NM): Break all the way out on a good match.
Gary V. Vaughan [Sun, 27 Jan 2013 14:07:27 +0000 (21:07 +0700)]
bootstrap: fix func_insert_if_absent bugs.
* gl/build-aux/bootstrap.in (func_insert_if_absent): Print verbose
message when there is a new entry to add.
Also, make sure to update the .gitignore file when changed.
* bootstrap: Regenerate.
* THANKS: Add Pádraig Brady.
Reported by Pádraig Brady.
Bernhard Voelker [Sat, 26 Jan 2013 05:50:04 +0000 (12:50 +0700)]
bootstrap: always auto-add .gitignore files at the top.
* gl/build-aux/bootstrap.in (func_gitignore_entries): New function.
Strip comments and blank lines.
(func_insert_sorted_if_absent): Renamed...
(func_insert_if_absent): ...to this. Adjust all callers.
Instead of comparing the sorted new file with the original,
compare the line count, being careful to diagnose duplicate
entries which would otherwise skew the count.
Co-authored-by: Gary V. Vaughan <gary@gnu.org> Signed-off-by: Gary V. Vaughan <gary@gnu.org>
Gary V. Vaughan [Thu, 3 Jan 2013 09:49:35 +0000 (16:49 +0700)]
maint: patch gitlog-to-changelog to reduce bogus warnings.
Rather than trying to find a new useful warning among the 55
expected warnings from vanilla gitlog-to-changelog, patch it to
elide the bogus warnings from duplicate log entries.
* gl/bulid-aux/gitlog-to-changelog.diff: Omit-from-ChangeLog is
a new log entry tag to skip legitimate log duplicates.
* build-aux/git-log-fix: Instead of deleting all content of
duplicates and generating a warning, append the new
Omit-from-ChangeLog tag to elide silently.
* Makefile.am *($(changelog)): Remove the 'expect 55 warnings'
echo.
Peter Rosin [Tue, 22 Jan 2013 21:54:43 +0000 (22:54 +0100)]
libtool: factor out the dll .def file test and improve it
Resolves bug#13414. Problem reported by Erik van Pienbroek
and Martin Doucha.
build-aux/ltmain.in (func_mode_link): Factor out the test if a
given symbol file is a module-definition (.def) file into...
(func_dll_def_p): ...this function, which also improves the check.
m4/libtool.m4 (_LT_LINKER_SHLIBS, _LT_LANG_CXX_CONFIG)
<cygwin, mingw, pw32, cegcc>: Similarly, factor out the test if
a given symbol file is a module-definition (.def) file into...
(_LT_DLL_DEF_P): ...this macro, which also improves the check.
tests/export-def.at: New test.
Makefile.am (TESTSUITE_AT): Add above test.
NEWS: Update.
THANKS: Update.
Peter Rosin [Mon, 21 Jan 2013 05:41:00 +0000 (06:41 +0100)]
libtool: allow tabs in *_cmds variables
This is in preparation for the next patch, which needs to have literal
tab characters survive the evaluation of the *_cmds variables.
build-aux/ltmain.in (func_execute_cmds, func_mode_link): Don't collapse
tabs and surrounding whitespace into a single space when executing a
tilde-separated cmds construct, instead keep any tabs intact.
Peter Rosin [Sat, 19 Jan 2013 21:14:16 +0000 (22:14 +0100)]
libtool: avoid tabs in all *_cmds variables.
This is in preparation for the next change, which will preserve
tabs when the *_cmds variables are evaluated. Removing tabs first
ensures that the libtool output stays the same when tabs are not
collapsed with surrounding whitespace.
m4/libtool.m4: Convert indenting tabs to spaces for all *_cmds
variables.
Peter Rosin [Wed, 16 Jan 2013 12:39:52 +0000 (13:39 +0100)]
libtool: feed .def files verbatim to the MSVC linker
m4/libtool.m4 (_LT_LINKER_SHLIBS, _LT_LANG_CXX_CONFIG) [MSVC]
<archive_expsym_cmds>: When the symbol list isn't really a symbol list,
but instead a .def file, copy it to a file with .def extension so that
MSVC recognizes it as a module-definition file and feed it verbatim.
NEWS: Update
Peter Rosin [Tue, 15 Jan 2013 08:31:31 +0000 (09:31 +0100)]
libtool: use false or : for $always_export_symbols, and simplify
* build-aux/ltmain.in (func_mode_link): Save a string comparison
by setting $lways_export_symbols to false or : and using it directly
as the first argument to if. Make sure that it is always initialized
while at it.
Peter Rosin [Wed, 9 Jan 2013 11:58:55 +0000 (12:58 +0100)]
tests: fix nits in path handling
tests/bindir.at: func_save_and_prepend_path is already checking
$bindirneeded internally, so remove checks from call sites. Add
proper quoting while at it.
(func_save_and_prepend_path): Use $PATH_SEPARATOR instead of a literal
colon (in both instances).
Peter Rosin [Tue, 8 Jan 2013 21:44:51 +0000 (22:44 +0100)]
libtool: simplify quoting and code for symbols exporting sed programs
* m4/libtool.m4 (_LT_LINKER_SHLIBS, _LT_LANG_CXX_CONFIG) [MSVC]
<archive_expsym_cmds>: Make the sed programs easier to read (and
recover some backslashes for later in the process).
Peter Rosin [Wed, 19 Sep 2012 06:43:57 +0000 (08:43 +0200)]
tests: don't feed -no-undefined to the linker during configure.
* tests/deplibs-mingw.at: Restore LDFLAGS for the configure run so that
the linker does not see -no-undefined. Makes the test pass instead of
skip on MinGW.
Peter Rosin [Tue, 1 Jan 2013 18:40:57 +0000 (19:40 +0100)]
maint: check if git works before relying on it
Makefile.am (m4/ltversion.m4): Take the opportunity to regenerate
$(srcdir)/.serial whenever git is actually working.
(git_version_gen): Provide a fallback version for the git-version-gen
script to use when .tarball-version does not exist and git is not
working.
Peter Rosin [Wed, 19 Dec 2012 10:20:28 +0000 (11:20 +0100)]
libtool: Drop $LDFLAGS when invoking the toolchain
m4/libtool.m4 (_LT_LANG_CXX_CONFIG) [Solaris] <archive_cmds>: Drop
$LDFLAGS as it is a user variable that is usually used when invoking
libtool. As such, it should not be used by libtool when it invokes the
toolchain as it contains options intended for libtool, not the
toolchain. Fixes export.at and other tests that add -no-undefined to
LDFLAGS.
Signed-off-by: Peter Rosin <peda@lysator.liu.se> Tested-by: Richard Palo <richard.palo@baou.fr>
Peter Rosin [Fri, 2 Nov 2012 22:50:43 +0000 (23:50 +0100)]
libtool: add @INIT@ to the preloader, for data imports on Windows
* m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS) [dumpbin]: Adjust
lt_cv_sys_global_symbol_to_cdecl so that it declares imported
data symbols as __declspec(dllimport). Adjust
lt_cv_sys_global_symbol_to_c_name_address and
lt_cv_sys_global_symbol_to_c_name_address_lib_prefix so that they
fill in "(void*) 0" for imported data symbols. Add new
lt_cv_sys_global_symbol_to_import which finds imported data
symbols if non-empty and export this variable to the libtool script
in the global_symbol_to_import variable. Adjust
lt_cv_sys_global_symbol_pipe so that data imports can be located.
* build-aux/ltmain.in (func_generate_dlsyms): When data imports
are present, as indicated by global_symbol_to_import, generate
a relocation function lt_syminit that fills in the addresses
of data imports at runtime and point to the new function with a
new virtual @INIT@ entry in the symbol list.
* libltdl/loaders/preopen.c (add_symlist): Look for the virtual
@INIT@ symbol (i.e. lt_syminit) and call it.
(vm_sym): Step past the @INIT@ symbol, if present.
* tests/demo.at (dlmain.c): Call the @INIT@ symbol, if present.
* NEWS: Update.
Peter Rosin [Fri, 2 Nov 2012 12:17:11 +0000 (13:17 +0100)]
libtool: unify the global symbol transformations
Since it is safe for $lt_cv_sys_global_symbol_to_cdecl to match
with a simple /^T .* .*$/ type expression, it is ok for the other
transformations as well. At least if you require at least one
$symcode at the start of the line, so that the just generated output
doesn't match the next sed expression.
* m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS): Unify the matching expressions
in the sed programs that transform the extracted symbol lines.
Gary V. Vaughan [Thu, 25 Oct 2012 15:03:05 +0000 (10:03 -0500)]
bootstrap: use a decent awk if /bin/awk is hopeless.
Bootstrap used to fail without an explicit AWK environment
setting on machines with both nawk and awk, but where awk is a
museum piece.
* gl/build-aux/inline-source (AWK): Remove initial setting.
(require_awk): Search PATH for a gawk, mawk or nawk before
settling on awk, just like configure does.
(func_include): Use it.
Gary V. Vaughan [Thu, 25 Oct 2012 14:00:09 +0000 (14:00 +0000)]
bootstrap: be sure to register gnulib submodule.
* gl/build-aux/bootstrap.in (require_gnulib_submodule): Register
the gnulib submodule before updating it, even with a shallow
clone of gnulib.
* bootstrap: Regenerate.
Reported by Robert Boehne.
Gary V. Vaughan [Thu, 25 Oct 2012 11:28:57 +0000 (06:28 -0500)]
tests: fixup experr for addition whitespace in error prefix.
Fix spurious test failures due to unmatched experr output.
* tests/libtoolize.at, tests/old-ltdl-iface.at: Add the addition
2 spaces now used to justify error prefixes.
Gary V. Vaughan [Thu, 25 Oct 2012 10:11:33 +0000 (05:11 -0500)]
bootstrap: use of ';' in sed scripts is not portable.
* gl/build-aux/bootstrap.in (require_buildreq_automake)
(require_dotgitmodules_parameters, require_package)
(func_update_po_files): Use '\n' or -e to separate sed commands,
instead of ';'.
* gl/build-aux/extract-trace (func_autoconf_configure)
(func_extract_trace_first): Likewise.
* gl/funclib.sh: Likewise.
(func_tr_sh): Likewise.
* gl/build-aux/options-parser (func_usage_message): Likewise.
* bootstrap: Regenerate.
Reported by Robert Boehne.
Gary V. Vaughan [Thu, 25 Oct 2012 09:00:52 +0000 (04:00 -0500)]
bootstrap: display prerequisite program environment vars.
Be more helpful when a prerequisite program from $buildreq
cannot be located, by showing what variable to export if it
is already installed but not in PATH.
* gl/build-aux/bootstrap.in (func_check_versions): Display
associated environment variables for not found prerequisite
programs.
* bootstrap: Regenerate.
Gary V. Vaughan [Thu, 25 Oct 2012 06:29:28 +0000 (01:29 -0500)]
bootstrap: honor COLORTERM and USE_ANSI_COLORS.
Plenty of machines use a terminfo database that doesn't have
entries for color escape sequences, even though the terminal
itself most likely supports ANSI color escapes.
* gl/build-aux/funclib.sh (require_term_colors): If COLORTERM
or USE_ANSI_COLORS are set, then ignore what terminfo says,
and use standard ANSI color escape sequences.
* bootstrap: Regenerate.
Gary V. Vaughan [Thu, 25 Oct 2012 06:15:56 +0000 (01:15 -0500)]
bootstrap: make error messages prettier.
* gl/build-aux/funclib.sh (func_error): Indent 'error' prefix by
two additional spaces to line up nicely with 'warning' and
'running'.
* bootstrap: Regenerate.
Gary V. Vaughan [Wed, 24 Oct 2012 03:17:24 +0000 (22:17 -0500)]
bootstrap: emphasize command executions with terminal bold.
* bootstrap.in (func_show_eval): Use $require_term_colors to
embolden the command about to be executed in output.
* bootstrap: Regenerate.
* bootstrap.conf (libtool_build_prerequisites): Use the standard
(colorful!) bootstrap func_show_eval here too.
Gary V. Vaughan [Wed, 24 Oct 2012 02:58:11 +0000 (21:58 -0500)]
bootstrap: show output from 'make bootstrap-deps'.
* bootstrap.conf (libtool_build_prerequisites): Add support for
AM_V_GEN and AM_V_at to the temporary pre-configure Makefile.
Instead of eliding non-error output from bootstrap-deps, show
the results, with verbosity set according to $opt_verbose.
* Makefile.am (m4/ltversion.m4, build-aux/ltmain.sh, libtool)
(README): Fix the display rules to correctly fall-back to
AM_DEFAULT_VERBOSITY when V=1 is not passed to make invocation.
Gary V. Vaughan [Mon, 22 Oct 2012 09:50:11 +0000 (16:50 +0700)]
maint: fixup badly formatted ChangeLog entries.
* build-aux/git-log-fix: Mostly missing category tags and refilling
to 64 columns, but also deleting duplicate entries from merging the
gary/reredo-test-operand-order branch.
* g/build-aux/gitlog-to-changelog.diff: Local patch to prevent
printing unqualified header lines for deleted duplicate patches.
* THANKS: Put email address for Paul Seidler here...
* build-aux/git-log-fix: ...and remove from ChangeLog here.
Gary V. Vaughan [Sat, 13 Oct 2012 07:39:45 +0000 (14:39 +0700)]
bootstrap: move into local gl overrides directory.
In order to work as if it were already adopted by upstream
gnulib, put bootstrap and supporting scripts into the local
gnulib overrides directory.
* bootstrap, build-aux/extract-trace, build-aux/funclib.sh,
build-aux/inline-source, build-aux/options-parser: Move from
here...
* gl/build-aux/bootstrap.in, gl/build-aux/extract-trace,
gl/build-aux/funclib.sh, gl/build-aux/inline-source,
gl/build-aux/options-parser: ...to here.
* gl/build-aux/options-parser (func_version): Show only the
first copyright notice on files generated with inline-source.
* gl/doc/bootstrap.texi: Developer documentation for bootstrap.
* gl/modules/extract-trace, gl/modules/funclib.sh,
gl/modules/inline-source, gl/modules/options-parser: Describe
dependencies for gnulib-tool.
* bootstrap.conf (gnulib_modules): Add extract-trace,
inline-source and options-parser modules.
* bootstrap: Regenerated from gnulib overrides as a mono-
lithic script file using gl/build-aux/inline-source.
Gary V. Vaughan [Fri, 19 Oct 2012 09:21:27 +0000 (16:21 +0700)]
libtoolize: select the first directory from AC_CONFIG_MACRO_DIRS.
* tests/libtoolize.at (multiple AC_CONFIG_MACRO_DIRS directories):
New test to ensure multiple directory arguments mork correctly.
* libtoolize.in (func_require_ac_macro_dir): Use expr to discard
any additional space delimited entries in the first
AC_CONFIG_MACRO_DIRS argument.
* bootstrap (func_require_macro_dir): Likewise.
Gary V. Vaughan [Thu, 18 Oct 2012 13:37:03 +0000 (20:37 +0700)]
libtoolize: migrate to new AC_CONFIG_MACRO_DIRS api.
* libtoolize.in (func_install_pkgmacro_files): Uee
AC_CONFIG_MACRO_DIRS.
(func_check_macros): Advise using AC_CONFIG_MACRO_DIRS.
(require_ac_macro_dir): Give priority to AC_CONFIG_MACRO_DIRS.
(require_macro_dir): Likewise.
* bootstrap: Give priority to AC_CONFIG_MACRO_DIRS.
* configure.ac: Define dummy AC_CONFIG_MACRO_DIRS for older
Autotools, that is allow bootstrap with current release versions.
Use AC_CONFIG_MACRO_DIRS instead of AC_CONFIG_MACRO_DIR.
* tests/testsuite.at: Source build-aux/extract-trace for access
to func_extract_trace.
(LT_AT_ACLOCAL): Use it to get the AC_CONFIG_MACRO_DIRS argument
to pass manually to aclocal for compatibility with old Automake.
Add a fallback AC_CONFIG_MACRO_DIRS definition to acinclude.m4
in the test directory.
(LT_AT_AUTORECONF): Likewise.
* tests/cdemo.at, tests/configure-iface.at, tests/darwin.at,
tests/demo.at, tests/depdemo.at, tests/early-libtool.at,
tests/libtoolize.at, tests/mdemo.at, tests/no-executables.at,
tests/nonrecursive.at, tests/old-ltdl-iface.at,
tests/recursive.at, tests/subproject.at, tests/tagdemo.at,
tests/template.at: Likewise.
* doc/libtool.texi: Update.
* NEWS: Update.
Peter Rosin [Fri, 19 Oct 2012 15:19:50 +0000 (17:19 +0200)]
libtool: parse "dumpbin -headers" to get symbols exported from implibs
* m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS) [MSVC]: Extract symbols
imported from DLLs by import libraries in the Microsoft dumpbin
wrapper.
(LT_PATH_NM): Add -headers option if dumpbin is the located name
lister to feed the above new code.
* NEWS: Update.
Peter Rosin [Fri, 19 Oct 2012 09:51:12 +0000 (11:51 +0200)]
libtool: make func_win32_libid work when the name lister is MS dumpbin
* m4/libtool.m4 (_LT_CHECK_MAGIC_METHOD) [MSVC]: Use
func_win32_libid as file_magic_cmd when the name lister
is MS dumpbin.
(_LT_CMD_GLOBAL_SYMBOLS): Export the new veriable nm_interface
to the libtool script.
* build-aux/ltmain.in (func_cygming_gnu_implib_p)
(func_cygming_ms_implib_p): Move up to before...
(func_win32_libid): ...which now uses them to determine if
the object is an import library when the nm_interface is
"MS dumpbin".
* NEWS: Update.
Gary V. Vaughan [Fri, 19 Oct 2012 05:23:39 +0000 (12:23 +0700)]
bootstrap: always extract only the first AC_CONFIG_MACRO_DIR arg.
Previous versions of bootstrap concatenated all the arguments to
multiple invocations of AC_CONFIG_MACRO_DIR when extracting the
macro_dir directory name. This change enforces correct and
consistent behaviour.
* libtoolize.in (func_require_macro_dir): Use the new
func_extract_trace_first function to make sure the first argument
is always used.
(func_require_aux_dir, func_require_gnulib_mk)
(func_require_source_base): Future proof these functions against
multiple invocations or additional arguments to the macros they
trace.
* bootstrap (func_require_macro_dir): .* is greedy, so _G_sed_scan
as it was will always return the last -I argument, which is wrong.
Move to a shell loop to ensure we always get the first -I argument
if any. (code from libtoolize.in).
Gary V. Vaughan [Fri, 19 Oct 2012 05:23:39 +0000 (12:23 +0700)]
tests: always extract only the first AC_CONFIG_MACRO_DIR arg.
Previous releases of libtoolize used the final invocation when
there were several, and after the rewrite over extract-trace,
all the invocation directories were concatenated. This change
enforces correct and consistent behaviour.
* tests/libtoolize.at (multiple AC_CONFIG_MACRO_DIR invocation):
New test.
* build-aux/extract-trace (func_extract_trace_first): New function
for clients that source this file, which returns only the first
argument to the first invocation of the named macros.
* libtoolize.in (func_require_ac_macro_dir): Use it to make sure
the first argument is always used.
(func_require_ac_aux_dir, func_require_ac_ltdl_dir)
(func_require_ac_ltdl_options): Future proof these functions against
multiple invocations or additional arguments to the macros they
trace.
* News (Important incompatible changes): Note change in semantics.
Reported by Eric Blake.
Gary V. Vaughan [Fri, 19 Oct 2012 05:23:39 +0000 (12:23 +0700)]
tests: always extract only the first ACLOCAL_AMFLAGS include arg.
* tests/libtoolize.at (libtoolize ACLOCAL_AMFLAGS extraction):
New test.
* libtoolize.in (func_check_macros): Display the correct advice
when ACLOCAL_AMFLAGS specifies a macrodir, but AC_CONFIG_MACRO_DIR
does not.
Peter Rosin [Fri, 19 Oct 2012 06:54:15 +0000 (08:54 +0200)]
libtool: avoid non-underscore symbols in the "dumpbin -symbols" wrapper
If an object has a symbol lacking an expected leading underscore,
the symbol name is not printed, but the symbol type is, leading
to output such as:
T _normal _normal
T T _another _another
when the expected output would have been something like:
T _normal _normal
T no_underscore no_underscore
T _another _another
However, symbols lacking an expected leading underscore are
not "real" symbols, they are internal symbols which we don't
care about, therefore drop them instead.
* m4/libtool.m4 (_LT_CMD_GLOBAL_SYMBOLS) [MSVC]: Output the whole
symbol line in one go.
* NEWS: Update.
Peter Rosin [Thu, 18 Oct 2012 22:18:10 +0000 (00:18 +0200)]
libtool: unbreak Windows path quoting
The lt_sed_naive_backslashify variable lost its lt_ prefix
when m4sh was dropped. But not everywhere.
* build-aux/ltmain.in (func_convert_core_file_wine_to_w32)
(func_convert_core_msys_to_w32): Drop the lt_ prefix from
the lt_sed_naive_backslashify variable.
Gary V. Vaughan [Thu, 18 Oct 2012 17:38:28 +0000 (00:38 +0700)]
libtool: don't set auxscriptsdir at bootstrap time.
* build-aux/ltmain.in: Declare relative paths to aux scripts from
source commands, for early inlining during bootstrap.
* Makefile.am (bootstrap_edit): Move auxscriptsdir
substitution from here....
(configure_edit): ...to here.
($(ltmain_sh)): Feed ltmain.in through inline-source as ltmain.sh
is generated to remove relative paths to aux scripts.
(install-data-local): Simplify. No need for special treatment for
ltmain.sh during installation, since aux scripts have already
been inlined.
Reported by Peter Rosin.
Gary V. Vaughan [Thu, 18 Oct 2012 16:41:53 +0000 (23:41 +0700)]
extract-trace: only source funclib.sh when $progname is extract-trace.
* build-aux/extract-trace: $usage is too generic, and can cause
sourced extract-trace to re-source options-parser. We already
require that funclib.sh be sourced before sourcing options-parser,
so it's safer to check that $progname is correct before sourcing
options-parser again from here.
Gary V. Vaughan [Thu, 11 Oct 2012 05:43:03 +0000 (12:43 +0700)]
maint: remove m4sh support.
Now that the code base has coalesced around a single option
parser, there's no need for the unused getopt.m4sh and support.
* build-aux/getopt.m4sh, build-aux/general.m4sh,
tests/getopt-m4sh.at: Remove.
* Makefile.am (m4sh_dir, LT_M4SH, general_m4sh, getopt_m4sh)
(sh_files): Remove.
(TESTSUITE_AT): Remove tests/getopt-m4sh.at.
(TESTS_ENVIRONMENT): Remove M4SH.
* bootstrap.conf (libtool_build_prerequisites): Remove M4SH.
* configure.ac (M4SH): Remove.
* HACKING (Editing `.m4sh' Files): Remove and renumber following
sections.
Gary V. Vaughan [Wed, 10 Oct 2012 12:30:07 +0000 (19:30 +0700)]
libtool: rewritten over funclib.sh instead of general.m4sh.
* Makefile.am (ltmain_m4sh, ltmain_sh_edit): Remove.
(ltmain_in): Path to ltmain.in.
(ltmain_sh): Generate ltmain.sh from ltmain.in using
$(bootstrap_edit).
* build-aux/ltmain.m4sh: Remove.
* build-aux/ltmain.in: Rewritten as a client of funclib.sh.
Gary V. Vaughan [Sun, 7 Oct 2012 05:58:18 +0000 (12:58 +0700)]
libtoolize: rewritten over funclib.sh instead of general.m4sh.
* Makefile.am (libtoolize_m4sh): Remove.
(EXTRA_DIST): Delete libtoolize_m4sh.
(libtoolize_in): Remove rule.
(libtoolize): Apply bootstrap_edit to libtoolize.in too.
* configure.ac (AC_CONFIG_SRCDIR): Refer to libtoolize.in.
* libtoolize.m4sh: Remove.
* libtoolize.in: Rewrite as a client of options-parser and the
new funclib.sh, avoiding the m4sh expansion step.
* tests/libtoolize.at, tests/old-ltdl-iface.at (experr): adjust
to match funclib.sh error output.
Gary V. Vaughan [Wed, 10 Oct 2012 17:09:48 +0000 (00:09 +0700)]
options-parser: correctly quote shell meta-characters in arguments.
When any argument contains a shell meta-character, it needs to be
quoted when passed around. We already pass parameter lists as
space delimited strings of arguments, and pass the string through
eval to turn it back into a list before re-assigning using `set'.
To prevent the shell from interpreting any meta-characters during
an `eval set dummy $argumentlist', they must be quoted again
inside the quoted argument list.
* build-aux/funclib.sh (func_quote_for_eval): Be careful to keep
a separate tally of quoted and unquoted argument lists, to
conform to the API of the single argument func_quote_for_eval
implementation in build-aux/general.m4sh.
* bulid-aux/options-parser (func_run_hooks): To account for the
doubly quoted meta-character argument lists, we must eval the
parameter reassignment `set' call separately from evaluating the
dynamically named hook results variable.
Gary V. Vaughan [Sun, 7 Oct 2012 11:01:24 +0000 (18:01 +0700)]
maint: factor common shell code into build-aux/funclib.sh.
Moving potentially reusable code into a common file that can
be sourced by clients, and adjusting for impedance mismatch
or necessary renames during integration.
* build-aux/funclib.sh: New file.
* build-aux/options-parser (Shell normalisation)
(User overrideable command paths, Global variables, func_append)
(require_term_colors, func_echo, func_echo_infix_1, func_warn)
(func_error, func_fatal_error, func_quote_for_eval, func_verbose):
Move from here...
* build-aux/funclib.sh (Shell normalisation, User overrideable
command paths, Global variables, func_append)
(require_term_colors, func_echo, func_echo_infix_1)
(func_warn_and_continue, func_error, func_fatal_error)
(func_quote_for_eval, func_verbose): ...to here.
* build-aux/general.m4sh (func_arith, func_basename)
(func_dirname, func_dirname_and_basename, func_echo_all)
(func_grep, func_len, func_mkdir_p, func_mktempdir)
(func_normal_abspath, func_relative_path, func_quote_for_expand)
(func_stripname, func_show_eval, func_tr_sh): Move from here...
* build-aux/funclib.sh(func_arith, func_basename)
(func_dirname, func_dirname_and_basename, func_echo_all)
(func_grep, func_len, func_mkdir_p, func_mktempdir)
(func_normal_abspath, func_relative_path, func_quote_for_expand)
(func_stripname, func_show_eval, func_tr_sh): ...to here.
* bootstrap (usage message): Document `-no-warn' option.
(func_append_u, func_warning): Move from here...
* build-aux/funclib.sh (func_append_uniq, func_warning): ...to
here.
* bootstrap, build-aux/extract-trace: Source build-aux/funclib.sh
before build-aux/options-parser.
* build-aux/options-parser (usage, long_help_message): Set
default values to match what is parsed by the unmodified parser.
* build-aux/extract-trace (usage, long_help_message): Only set
from func_main, so that clients sourcing this file can still use
the correct defaults from build-aux/options-parser.
* bootstrap (bootstrap_options_prep, bootstrap_parse_options):
Move warning option parsing from here...
* build-aux/option-parser (func_options_prep)
(func_parse_options): ...to here, where all clients can benefit.
* Makefile.am (funclib_sh): New macro; path to funclib.sh.
(EXTRA_DIST): Add $(funclib_sh).
Gary V. Vaughan [Sun, 7 Oct 2012 15:32:18 +0000 (22:32 +0700)]
libtoolize: source extract-trace rather than fork and execute each call.
Rather than forking and executing a full $SHELL for each macro
extraction, source the script and its dependencies into our
execution space and use the provided func_extract_trace API.
* libtoolize.m4sh: Source extract-trace from an appropriate
directory determined presently by make.
(func_extract_trace): Remove this wrapper.
* Makefile.am (abs_aux_dir): Absolute path to extract-trace
directory.
(configure_edit): Inject abs_aux_dir into uninstalled libtoolize.
(bin_SCRIPTS): Remove libtoolize.
(uninstall-hook): Manually uninstall libtoolize.
(install-data-local): Inject pkgauxdir into installed libtoolize
during installation.
Gary V. Vaughan [Sat, 6 Oct 2012 10:50:57 +0000 (17:50 +0700)]
options-parser: employ fork minimisation.
* build-aux/options-parser (_G_HAVE_XSI_OPS): Environment
overrideable defaults for bash and zsh, which are known to
support XSI extensions.
(_G_HAVE_PLUSEQ_OP): Similarly for new enough versions of bash,
which are known to have += support.
(func_append): Only perform the shell += probe when state of
support is unknown.
(func_split_equals, func_split_short_opt): Similarly for XSI
probe to select fastest working implementation.
* build-aux/options-parser (func_parse_options): When there is
more than one non-option argument, "$*" forces all of them into
a single string. Use ${1+"$@"} to set arguments correctly.
Gary V. Vaughan [Fri, 12 Oct 2012 10:54:21 +0000 (17:54 +0700)]
bootstrap: work when using fallback shallow gnulib clone.
Bootstrapping without --gnulib-srcdir creates a shallow gnulib
clone to run gnulib-tool out of, except that the parent package
is almost certainly using a revision of gnulib before just tha
most recent 2 gnulib revisions.
* bootstrap (func_require_gnulib_submodule): Pull the most
recent 365 revisions, which ought to be enough for a well-
maintained parent package.
Don't forget to run 'git submodule update' to select the correct
gnulib revision.
Gary V. Vaughan [Tue, 9 Oct 2012 12:52:51 +0000 (19:52 +0700)]
bootstrap: require GNU make to bootstrap.
Make is not installed by default in some environments, such as
cygwin... which is slow enough already without having to wait
for gnulib-tool, bootstrap and half of configure to complete
before getting an error.
* bootstrap.conf (buildreq): Add recent GNU make to bootstrap
requirements. Now missing make is diagnosed in the earliest
part of bootstrap.