Gary V. Vaughan
cceb922d06
Factor load functionality into include builtin.
...
* m4/module.c (m4__module_open): Instead of calling lt_dlopenext
right away, use the preload hint first incase path searching has
been disabled by POSIXLY_CORRECT. Otherwise fallback to a
manual path search to override libltdl's algorithm.
* m4/m4module.h: Adjust.
* m4/path.c (FILE_SUFFIXES): Order to try suffixes in our path
search algorithm.
(NO_SUFFIXES): Alternatively, how to to search a path without
adding file suffixes.
(m4_path_search): Add a new suffixes parameter defaulting to
NO_SUFFIXES. Adjust all callers.
(m4_load_filename): New generic load function that tries to
open a matched file first as a module, and if that fails fall
back to as (possibly frozen) m4 input.
(m4_fopen): New function with close on exec functionality.
* modules/m4.c (include, sinclude): Use m4_load_filename to
overload these builtins to work with modules too.
* modules/load.c (load): Removed this builtin.
* src/main.c: Remove Dynamic loading features section, and
M4MODPATH support.
(long_options): Remove "load-module", "unload-module" and
"module-directory" options.
(OPTSTRING): Remove 'M' and 'm' options.
(process_file): Use m4_load_filename to support module names
on the command line.
* Makefile.am (TESTS_ENVIRONMENT): No need for abs_top_builddir
any more.
* doc/m4.texinfo: Update examples.
(Dynamic loading features, Load): Removed.
(Command line files): Describe how non-option arguments are
treated to try to find a matching macro file or dso.
(Include): Describe additional dso loading features if a
suitable text file cannot be found.
(Modules): Updated.
* tests/builtins.at, tests/m4.in, tests/modules.at,
tests/options.at: Adjust test cases and calling conventions
to new semantics.
* NEWS: Updated.
2008-05-06 15:44:20 -04:00
Eric Blake
c2a2811a8b
Stage 22: allow builtin token concatenation outside $@.
...
* m4/m4module.h (m4_is_arg_composite): New prototype.
(m4_symbol_value_copy): Change return type.
(m4_arg_text): Add parameter.
(M4ARG): Adjust callers.
* m4/m4private.h: Adjust comments.
* m4/symtab.c (m4_symbol_value_copy): Detect when builtins are
flattened.
* m4/input.c (init_builtin_token): Add parameter, and allow
concatenating builtins.
(m4__next_token): Adjust caller.
* m4/macro.c (m4_is_arg_composite): New function.
(expand_argument): Allow builtin concatenation.
(m4_arg_text): Add parameter.
(m4__arg_adjust_refcount, m4__arg_print): Adjust callers.
(m4_arg_equal): Fix comparison of builtin tokens.
* modules/m4.c (define, pushdef): Warn when flattening builtins.
* doc/m4.texinfo (Define): Remove dead comment.
(Defn): Update to reflect code changes.
* tests/builtins.at (defn): Remove xfail.
* NEWS: Document this change.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-05-05 20:54:23 -06:00
Eric Blake
1dd98ea10e
Avoid -Wshadow compiler warnings.
...
* m4/output.c (threshold_diversion_CB): s/div/diversion/.
* m4/macro.c (make_argv_ref, arg_symbol, m4_arg_symbol)
(m4_is_arg_text, m4_is_arg_func, m4_arg_text, m4_arg_empty)
(m4_arg_len, m4_arg_func, m4__arg_print, m4_make_argv_ref)
(m4_push_arg, m4__push_arg_quote): s/index/arg/.
* modules/format.c (format): Likewise.
* modules/m4.c (ifelse): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-05-01 12:05:03 -06:00
Eric Blake
c3e7dc1839
Fix regression in define from 2008-02-22.
...
* m4/m4module.h (m4_symbol_value_copy): Add parameter.
* m4/symtab.c (m4_symbol_value_copy): Support copying $@
back-references.
* m4/macro.c (expand_argument): Update callers.
* modules/m4.c (define, pushdef): Likewise.
* tests/builtins.at (define): Enhance test to catch this.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-05-01 06:53:47 -06:00
Eric Blake
0fe33c9c7d
Stage 21b: $@ concatenates builtins, m4wrap takes builtins.
...
* m4/m4module.h (m4_push_builtin): Add parameter.
(m4_builtin_print, m4_push_wrapup_init, m4_push_wrapup_finish)
(m4_arg_print, m4_symbol_value_print): Rename and reduce scope...
* m4/m4private.h (m4__builtin_print, m4__push_wrapup_init)
(m4__push_wrapup_finish, m4__arg_print, m4__symbol_value_print):
...to these, in some cases adding a parameter.
(m4__append_builtin): New prototype.
* m4/builtin.c (m4_builtin_print): Alter signature to print
builtin to a growing symbol chain.
* m4/symtab.c (m4__symbol_value_print): Alter signature.
(m4_symbol_print, dump_symbol_CB): Adjust callers.
* m4/input.c (builtin_peek, builtin_read, builtin_unget)
(builtin_print, builtin_funcs): Delete, handled via composite
blocks now.
(struct m4_input_block): Delete u.builtin member.
(init_builtin_token): Only use composite block.
(m4__append_builtin): New function.
(m4_push_builtin, m4__push_wrapup_init): Alter signature.
(m4__push_symbol): Allow builtin tokens.
(m4__push_wrapup_finish): Rename.
(composite_print, m4_print_token): Adjust callers.
* m4/macro.c (m4_wrap_args, collect_arguments): Allow builtin
tokens.
(m4__arg_print): Alter signature.
(trace_prepre, trace_pre, m4_arg_text, m4_arg_equal): Adjust
callers.
* modules/m4.c (m4wrap): Allow builtin tokens.
(defn, errprint): Adjust callers.
* modules/gnu.c (builtin): Likewise.
* doc/m4.texinfo (M4wrap): New test.
(Debuglen): Adjust expected output.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-04-14 21:09:14 -06:00
Eric Blake
03c4e545af
Improve OS/2 detection.
...
* modules/gnu.c (m4_macro_table): Ensure all possible identifiers
are defined, not just the first. The testsuite ensures that
exactly one gets defined.
* m4/system_.h [__EMX__]: OS/2 is not Unix-compatible, no matter
what other pre-defined macros it has.
* THANKS: Update.
Reported by Elbert Pol.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-04-14 17:14:33 -06:00
Eric Blake
38f06945a3
Allow back-referenced macro names; fixes 2008-03-13 regression.
...
* m4/m4module.h (m4_symbol_value_lookup): Change prototype.
* m4/utility.c (m4_symbol_value_lookup): Change signature.
* modules/m4.c (undefine, popdef, ifdef, m4_dump_symbols, defn):
Adjust all callers.
* tests/others.at (ifndef): New test.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-04-10 14:15:51 -06:00
Eric Blake
0b8410450c
Overhaul inter-version releases to work with git.
...
* configure.ac (version): New variable, which has nicer version
contents when using git 1.5.5+, hardcoded to 1.9a otherwise.
(TIMESTAMP): Delete, since CVS id expansion died with transition
to git.
(AM_INIT_AUTOMAKE): Use version to decide gnu vs. gnits.
* build-aux/mkstamp: Delete, no longer used.
* Makefile.am (CONFIG_STATUS_DEPENDENCIES): Kill, to speed up
rebuilds when timestamps don't matter.
(MKSTAMP): Delete, no longer used.
(EXTRA_DIST): No longer worry about mkstamp.
(.version): New rule and distributed file.
(doc/m4.1, tests/package.m4): Depend on .version, not
configure.ac, for timestamp.
* ltdl/m4/gnulib-cache.m4: Import git-version-gen module.
* modules/gnu.c (__m4_version__): TIMESTAMP no longer exists.
* src/main.c (main): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-04-08 12:12:53 -06:00
Eric Blake
6608fa6d08
Stage 20b: make m4wrap obey POSIX fifo ordering.
...
* m4/m4module.h (m4_wrap_args): Add prototype.
* m4/m4private.h (enum m4__symbol_chain_type): Add M4__CHAIN_LOC.
(struct m4__symbol_chain): Add struct u_l.
* m4/input.c (m4_push_wrapup_init, m4_push_wrapup_finish): Use
new link type.
(composite_peek, composite_read, composite_clean): Handle location
link.
* m4/macro.c (m4_wrap_args): New function.
* modules/m4.c (m4wrap): Use it.
* doc/m4.texinfo (M4wrap): Sync with branch and POSIX.
(Extensions): Document extension of multiple arguments.
(Location, Improved m4wrap): Adjust example to match FIFO order.
* tests/builtins.at (wrap): Likewise.
* NEWS: Document this change.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-03-18 14:00:39 -06:00
Eric Blake
a2df6b461c
Stage 19c: allow builtin tokens in more macros.
...
* m4/m4module.h (m4_symbol_value_lookup, m4_builtin_print): New
prototypes.
* m4/m4private.h (enum m4__symbol_chain_type): Add
M4__CHAIN_FUNC.
(struct m4__symbol_chain): Add builtin member.
* m4/utility.c (m4_symbol_value_lookup): New method.
* m4/builtin.c (m4_builtin_print): New function.
* m4/symtab.c (m4_symbol_value_print): Use it.
* m4/input.c (builtin_print): Likewise.
(m4__push_symbol): Allow pushing builtin tokens.
(composite_peek, composite_read, composite_unget, composite_clean)
(composite_print): Handle builtin tokens.
(init_builtin_token): Allow builtin tokens from composite input.
(m4__next_token): Flatten builtins inside comment or string.
* m4/macro.c (expand_argument): Strengthen assertion.
(collect_arguments, m4_arg_equal, m4_arg_print, m4_push_args):
Handle builtin tokens.
(arg_symbol): Add parameter, and allow NULL level.
(m4_arg_symbol, m4__push_arg_quote): Adjust callers.
(m4_arg_text): Ensure all builtins have been flattened.
* modules/m4.c (defn, dumpdef, popdef, traceoff, traceon)
(undefine, m4_dump_symbols): Warn on invalid macro names.
(ifdef, ifelse, shift): Handle builtin tokens.
* modules/gnu.c (m4symbols): Likewise.
* doc/m4.texinfo (Defn, Ifdef, Ifelse): Document and test the new
behavior.
(Debuglen): Likewise, and remove xfail.
* NEWS: Mention the change.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-03-13 21:09:33 -06:00
Eric Blake
2f49d755e5
Stage 19b: invert sense of bit for handling builtin tokens.
...
* m4/m4module.h (M4BUILTIN_ENTRY): New convenience macro.
(M4_BUILTIN_GROKS_MACRO): Rename...
(M4_BUILTIN_FLATTEN_ARGS): ...and invert sense.
(m4_symbol_value_groks_macro, m4_symbol_groks_macro): Likewise...
(m4_symbol_value_flatten_args, m4_symbol_flatten_args): ...to
this.
* m4/m4private.h (VALUE_MACRO_ARGS_BIT)
(m4_symbol_value_groks_macro): Likewise...
(VALUE_FLATTEN_ARGS_BIT, m4_symbol_value_flatten_args): ...to
this.
* m4/symtab.c (m4_symbol_value_groks_macro): Likewise...
(m4_symbol_value_flatten_args): ...to this.
* m4/macro.c (collect_arguments): Accomodate changed sense.
* m4/module.c (m4__module_open): Require arguments if flattening
is requested.
* m4/input.c (m4_push_string_finish): For now, flatten all
builtins pushed as back-references.
* modules/gnu.c (m4_builtin_table, builtin): Adjust all clients.
* modules/import.c (m4_builtin_table): Likewise.
* modules/load.c (m4_builtin_table): Likewise.
* modules/modtest.c (m4_builtin_table): Likewise.
* modules/mpeval.c (m4_builtin_table): Likewise.
* modules/perl.c (m4_builtin_table): Likewise.
* modules/shadow.c (m4_builtin_table): Likewise.
* modules/stdlib.c (m4_builtin_table): Likewise.
* modules/time.c (m4_builtin_table): Likewise.
* modules/m4.c (m4_builtin_table): Likewise.
(mkstemp): Undo #undef hack from 2006-10-23, now that macro names
are stringized without preprocessor expansion.
* doc/m4.texinfo (Defn): Update comments to match reality.
(Debuglen): Update test now that user macros pass builtin tokens.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-03-13 21:09:32 -06:00
Eric Blake
951a9ef5bb
Consistently cast malloc results, for C++ compilation.
...
* m4/builtin.c (m4_builtin_find_by_name): Add cast.
* m4/hash.c (m4_hash_new, m4_get_hash_iterator_next, node_new)
(m4_hash_resize, maybe_grow): Likewise.
* m4/m4.c (m4_create): Likewise.
* m4/macro.c (expand_macro): Likewise.
* m4/output.c (m4_tmpname): Likewise.
* m4/path.c (search_path_add): Likewise.
* m4/symtab.c (m4_symtab_create, m4_symbol_value_create)
(symtab_fetch): Likewise.
* m4/syntax.c (m4_syntax_create): Likewise.
* modules/gnu.c (regexp_compile): Likewise.
* src/main.c (main): Likewise.
* src/freeze.c (reload_frozen_state): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-03-13 12:06:23 -06:00
Eric Blake
2cdf327333
Stage 17: pass argv through quoted strings.
...
* m4/m4module.h (m4_arg_equal, m4_arg_len): Add parameter.
(M4ARGLEN): Adjust definition.
* m4/m4private.h (struct m4__symbol_chain): Add has_func member.
(struct m4_symbol_value): Add wrapper and has_func members.
(struct m4_macro_args): Add flatten and has_func members.
* m4/input.c (append_quote_token): Return argv refs inside quoted
strings.
(init_argv_symbol): Populate new fields.
* m4/macro.c (expand_argument, collect_arguments, make_argv_ref)
(m4_make_argv_ref): Likewise.
(arg_symbol, arg_mark, m4_is_arg_text, m4_is_arg_func): Use new
fields.
(m4_arg_equal, m4_arg_len): Handle quoted argv references, and add
new parameter.
* modules/m4.c (ifelse): Adjust caller.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-02-22 05:43:04 -07:00
Eric Blake
def1f82375
Stage 16: cache quotes and improve m4_arg_print.
...
* m4/m4module.h (m4_symbol_value_print, m4_symbol_print)
(m4_arg_print): Adjust prototypes.
(m4_dump_args): Delete.
(m4_push_wrapup): Split...
(m4_push_wrapup_init, m4_push_wrapup_finish): ...into these
prototypes.
* m4/m4private.h (struct m4_syntax_table): Add cached_quote
member.
(m4__quote_cache, m4__quote_uncache): New prototypes.
* m4/syntax.c (m4_syntax_create): Initialize the cache.
(m4__quote_cache): New function.
(m4_set_syntax): Update caller.
* m4/symtab.c (m4_symbol_value_print): Add parameter.
(m4_symbol_print, dump_symbol_CB): Adjust all callers.
* m4/utility.c (m4_dump_args): Delete; callers should use
m4_arg_print instead.
* m4/input.c (m4_push_wrapup_init, m4_push_wrapup_finish): Split
implementation, and allow embedded NUL.
(m4_print_token, pop_input, composite_print, composite_peek):
(composite_read, append_quote_token): Adjust all callers.
* m4/macro.c (trace_prepre, m4_arg_text, make_argv_ref):
Likewise.
(m4_arg_print): Add parameters.
(trace_pre): Rewrite in terms of m4_arg_print.
* modules/m4.c (errprint): Likewise.
(m4wrap): Rewrite to allow embedded NUL.
(dumpdef): Adjust caller.
* doc/m4.texinfo (Debuglen): Enhance debuglen test.
* tests/null.m4: Test for NUL in m4wrap.
* tests/null.out: Update expected output.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-02-20 21:37:30 -07:00
Eric Blake
2e81b08037
Avoid some magic numbers.
...
* m4/m4private.h (CHAR_EOF, CHAR_BUILTIN, CHAR_QUOTE, CHAR_ARGV)
(CHAR_RETRY): Define in terms of UCHAR_MAX.
* m4/syntax.c (m4_syntax_create, set_syntax_set)
(reset_syntax_set, check_is_single_quotes)
(check_is_single_comments, check_is_macro_escaped)
(m4_set_quotes, m4_set_comment): Likewise.
* modules/gnu.c (regexp_compile): Likewise.
* modules/m4.c (translit): Likewise.
* src/freeze.c (produce_syntax_dump): Likewise.
Reported by Ralf Wildenhues.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-02-18 06:24:08 -07:00
Eric Blake
7f0b47b96e
* modules/gnu.c (regexp_compile): Use a fastmap for regex speed.
...
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-02-15 16:46:50 -07:00
Eric Blake
4af40c4d6f
Allow builtin text macros to specify number of arguments.
...
* m4/m4module.h (struct m4_macro): Add argument limits to builtin
text macros.
* m4/module.c (install_macro_table): Allow text macros to warn on
extra arguments.
* modules/gnu.c (m4_macro_table): Update all clients.
* modules/load.c (m4_macro_table): Likewise.
* modules/mpeval.c (m4_macro_table): Likewise.
* modules/perl.c (m4_macro_table): Likewise.
* modules/shadow.c (m4_macro_table): Likewise.
* modules/traditional.c (m4_macro_table): Likewise.
* modules/modtest.c (m4_macro_table): Likewise. Also add text
macros, for testing this.
* doc/m4.texinfo (Standard Modules): Update text, and enhance
test.
* tests/modules.at (modules: text): New test.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-02-11 13:33:08 -07:00
Eric Blake
9123df1a73
Consistently use size_t for number of arguments.
...
* m4/m4module.h (m4_builtin_func): Alter prototype.
(struct m4_builtin): Adjust type of min_args, max_args.
(M4BUILTIN, M4BUILTIN_HANDLER): Adjust all builtins.
(m4_bad_argc, m4_dump_args, m4_macro_call, m4_arg_argc)
(m4_arg_symbol, m4_is_arg_text, m4_is_arg_func, m4_arg_text)
(m4_arg_equal, m4_arg_empty, m4_arg_len, m4_arg_func)
(m4_arg_print, m4_push_arg): Adjust all clients.
* m4/m4private.h (struct m4__symbol_chain, m4_symbol_value)
(m4_macro_args): Adjust type of various fields.
(m4__push_arg_quote): Adjust all clients.
* m4/input.c (m4_pop_wrapup): Likewise.
* m4/macro.c (m4_macro_call, trace_pre, make_argv_ref)
(arg_symbol, m4_arg_symbol, m4_is_arg_text, m4_is_arg_func)
(m4_arg_text, m4_arg_equal, m4_arg_empty, m4_arg_len)
(m4_arg_func, m4_arg_print, m4_make_argv_ref, m4_push_arg)
(m4__push_arg_quote, m4_push_args, m4_arg_argc): Likewise.
* m4/utility.c (m4_bad_argc, m4_dump_args): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/gnu.c (changesyntax): Likewise.
* modules/m4.c (m4_dump_symbols, undefine, popdef, ifelse, defn)
(undivert, traceon, traceoff): Likewise.
* modules/m4.h (m4_dump_symbols_func): Likewise.
* modules/perl.c (perleval): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-02-02 14:55:08 -07:00
Eric Blake
88382ff9ef
Stage 12c: add macro for m4_arg_len.
...
* m4/m4module.h (M4ARGLEN): New macro.
* m4/macro.c (process_macro): Adjust all callers.
* m4/utility.c (m4_dump_args): Likewise.
* modules/m4.c (divert, maketemp, mkstemp, m4wrap, len, index)
(substr): Likewise.
* modules/gnu.c (builtin, indir, mkdtemp, patsubst, regexp)
(renamesyms): Likewise.
* modules/stdlib.c (setenv): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-01-26 00:08:48 -07:00
Eric Blake
726430fec6
Stage 12b: add m4_string_pair.
...
* m4/m4module.h (m4_string_pair): New type.
(m4_get_syntax_quotes, m4_get_syntax_comments): New prototypes.
(m4_symbol_value_print, m4_symbol_print, m4_shipout_string_trunc):
Alter signature.
* m4/m4private.h (struct m4_string): Delete.
(struct m4_syntax_table): Combine quote and comment members.
(m4_get_syntax_lquote, m4_get_syntax_rquote, m4_get_syntax_bcomm)
(m4_get_syntax_ecomm): Adjust accessors.
(m4_get_syntax_quotes, m4_get_syntax_comments): New fast
accessors.
* m4/symtab.c (m4_symbol_value_print, m4_symbol_print):
Alter signatures.
* m4/input.c (string_print, composite_print, m4_input_print):
All callers updated.
* m4/syntax.c (m4_syntax_delete, m4_set_syntax)
(check_is_single_quotes, m4_set_quotes, set_quote_age)
(m4_get_syntax_lquote, m4_get_syntax_rquote)
(m4_get_syntax_quotes, check_is_single_comments, m4_set_comment)
(m4_get_syntax_bcomm, m4_get_syntax_ecomm)
(m4_get_syntax_comments): Likewise.
* m4/macro.c (trace_prepre, trace_pre, m4_push_args): Likewise.
* m4/output.c (m4_shipout_string, m4_shipout_string_trunc):
Likewise.
* modules/m4.c (dumpdef, m4_make_temp): Likewise.
* src/freeze.c (produce_frozen_state): Likewise.
* tests/freeze.at (reloading unknown builtin): Update test.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-01-25 23:50:47 -07:00
Eric Blake
782e3ac755
Stage 10: avoid extra copying of strings and comments.
...
* ltdl/m4/gnulib-cache.m4: Import intprops and vasnprintf-posix
modules.
* m4/m4private.h (m4__token_type): Adjust prototype.
* m4/input.c (m4__next_token): Support new parameter.
* m4/macro.c (m4_macro_expand_input, expand_token)
(expand_argument, collect_arguments): Adjust callers.
* modules/m4.c (ntoa): Tighten buffer size.
* m4/output.c (m4_tmpname): Guarantee no buffer overflow.
* modules/format.c (arg_int, arg_long, arg_double): New helper
functions, to detect overflow or unparsed characters.
(ARG_INT, ARG_LONG, ARG_STR, ARG_DOUBLE): Adjust to check for
missing or excess arguments.
(format): Likewise, and also output directly into obstack if there
is room.
* doc/m4.texinfo (History): Update for new year.
(Format): Test for new warnings.
Signed-off-by: Eric Blake <ebb9@byu.net>
2008-01-16 20:16:28 -07:00
Eric Blake
e38bf1ca50
Stage 9: share rather than copy single-arg refs.
...
* ltdl/m4/gnulib-cache.m4: Import memmem and quote modules.
* m4/m4module.h (m4_arg_scratch): New prototype.
* m4/m4private.h (m4__push_symbol): Add parameter.
(m4_arg_scratch): Add fast accessor.
(struct m4): Add expansion_level member, taken...
* m4/macro.c (expansion_level): ...from here. Adjust all users.
(expand_argument): Minor cleanup.
(expand_macro): Track scratch space per macro call.
(m4_arg_scratch): New function.
(m4_make_argv_ref): Call new function.
(m4_push_arg): Push reference to $0.
(m4_push_args): Rework separator usage, since separators will
usually be inlined.
(process_macro): Allow embedded NUL.
* m4/input.c (INPUT_INLINE_THRESHOLD): New define.
(m4__push_symbol): Add parameter. Inline short strings, and save
references through rescanning.
* m4/symtab.c (m4_set_symbol_value_text): Weaken assertion.
* modules/m4.c (errprint, index): Handle NUL transparently.
(dumpdef, translit): Use scratch space, rather than expansion
stack.
* modules/gnu.c (renamesyms, m4symbols): Likewise.
* tests/others.at (nul character): New test.
(iso8859): Quote absolute file name, remove XFAIL.
* tests/iso8859.m4: Avoid raw NUL in output.
* tests/null.m4: New file.
* tests/null.out: Likewise.
* tests/null.err: Likewise.
* Makefile.am (OTHER_FILES): Distribute new files.
* .gitattributes: Treat new files as text.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-12-20 14:46:08 -07:00
Eric Blake
fa34c3f776
Stage 8: extend life of references into argv.
...
* m4/system_.h (obstack_regrow): Delete.
* m4/m4private.h (struct m4_symbol_chain): Add level field.
(m4__push_symbol): Adjust prototype.
(m4__adjust_refcount): New prototype.
(DEBUG_MACRO) [DEBUG]: New debug control.
(struct m4__macro_arg_stacks): New structure.
(struct m4): Add arg_stacks, stacks_count fields.
* m4/m4module.h (m4_make_argv_ref): Add parameter.
* m4/macro.c (argc_stack, argv_stack): Delete, replaced by
context->arg_stacks.
(m4_macro_expand_input) [DEBUG_MACRO]: Add debug hooks,
conditional on M4_DEBUG_MACRO envvar.
(collect_arguments): Adjust signature.
(expand_macro): Rework obstack handling.
(m4__adjust_refcount, arg_mark): New functions.
(m4_make_argv_ref): Populate new field.
(m4_push_arg, m4_push_args): Track inuse.
(process_macro): One less cast.
* m4/m4.c (m4_delete): Clean up arg_stacks.
* m4/input.c (make_text_link): Use new field.
(m4__push_symbol, file_clean): Update signature.
(composite_read): Bump refcount when done with reference.
(composite_clean): New function.
(pop_input): Adjust caller.
* m4/debug.c (m4_debug_message): Make assertion match comment.
* modules/gnu.c (builtin, indir): Adjust callers.
* tests/builtins.at (ifelse): New test.
(exp): Move and rename...
* tests/others.at (countdown): ...to this.
* doc/m4.texinfo (Improved foreach): Fix tracing usage in
example.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-12-17 21:59:56 -07:00
Eric Blake
a9d31f373b
Stage 6: convert builtins to push arg at a time.
...
* m4/m4module.h (m4_shipout_text): Rename...
(m4_divert_text): ...to this, to avoid confusion with m4_shipout_*
that does not worry about sync lines.
(m4_shipout_string_trunc): New prototype.
* m4/output.c (m4_shipout_text): Rename...
(m4_divert_text): ...to this.
(m4_shipout_string): Move guts...
(m4_shipout_string_trunc): ...to this new function.
* m4/macro.c (m4_push_arg, m4_push_args): New functions.
(expand_token, process_macro): Update callers.
* m4/input.c (string_print): Likewise.
* modules/m4.c (ifdef, ifelse, shift, substr, translit, divert):
Likewise.
* modules/gnu.c (patsubst): Likewise.
(debuglen): Use SIZE_MAX for unlimited debug length.
* src/main.c (main): Likewise.
* m4/m4.c (m4_create): Default max_debug_length to SIZE_MAX, not
zero.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-12-08 21:05:11 -07:00
Eric Blake
b8122b5589
Minor security fix: Quote output of mkstemp.
...
* modules/m4.c (m4_make_temp): Produce quoted output.
* doc/m4.texinfo (Mkstemp, Mkdtemp): Update the documentation and
tests.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-12-07 14:11:21 -07:00
Eric Blake
bcb92cf23a
Stage 5: add notion of quote age.
...
* m4/m4module.h (m4_get_symbol_value_quote_age): New prototype.
(m4_set_symbol_value_text): Adjust prototype.
(m4_has_syntax): Factor out the unsigned char cast.
* m4/m4private.h (struct m4_syntax_table): Add syntax_age and
quote_age members.
(m4__quote_age, m4__safe_quotes): New accessor macros, no need for
functions at this point.
(struct m4_symbol_value, struct m4_macro_args): Add quote_age
member.
(m4_set_symbol_value_text): Adjust fast accessor.
(m4_get_symbol_value_quote_age): New fast accessor.
* m4/symtab.c (m4_set_symbol_value_text): Add parameter.
(m4_get_symbol_value_quote_age): New function.
(m4_symbol_value_copy): Adjust callers.
* m4/macro.c (expand_token): Add parameter, and track quote age.
(expand_argument, collect_arguments): Track quote age.
(m4_macro_expand_input, process_macro, m4_make_argv_ref)
(m4_macro_expand_input): Update callers.
(m4_arg_text, m4_arg_len, m4_arg_func): Abort on type mismatch.
* m4/input.c: Comment cleanups.
(struct m4_input_block): Reduce size.
(m4__next_token): Report quote age.
(m4_push_builtin, init_builtin_token): Update callers.
* m4/utility.c (skip_space): Adjust callers.
* m4/module.c (install_macro_table): Likewise.
* m4/syntax.c (m4_set_syntax): Initialize and update quote age.
(m4_set_quotes, m4_set_comment): Detect no-op changes, and update
quote age.
(set_quote_age): New helper function.
(check_is_single_quotes, check_is_single_comments): Adjust
callers.
* src/freeze.c (reload_frozen_state): Likewise.
* src/main.c (main): Likewise.
* modules/m4.c (define, pushdef): No need to set macro text.
* tests/builtins.at (changequote, defn): New tests.
* examples/wrapfifo.m4: New file.
* examples/wraplifo.m4: New file.
* Makefile.am (dist_pkgdata_DATA): Distribute new examples.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-12-07 07:10:20 -07:00
Eric Blake
6128996ce3
Stage 4: route indir, builtin through ref; make argv opaque.
...
* m4/system_.h (obstack_regrow): Fix precedence.
* m4/m4module.h (m4_arg_equal, m4_arg_empty, m4_make_argv_ref):
New prototypes.
(struct m4_macro_args): Move...
* m4/m4private.h (struct m4_macro_args): ...here, making it opaque
to modules. Add has_ref member.
(bool_bitfield): New helper typedef.
(struct m4_symbol_chain): Add flatten and len members.
* m4/macro.c (empty_symbol): New placeholder, for optimizing
comparison with empty string.
(m4_macro_expand_input): Initialize it.
(collect_arguments): Alter signature, and populate new fields.
(trace_pre, trace_post): Remove redundant parameter.
(expand_macro): Alter handling of obstacks.
(m4_arg_symbol): Account for wrapped argv.
(m4_arg_equal, m4_arg_empty, m4_make_argv_ref): New methods.
(m4_arg_text, m4_arg_len, m4_arg_func): Use new methods.
* modules/m4.c (ifelse, syscmd): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
(undefine, popdef, m4_dump_symbols): Optimize.
* modules/gnu.c (builtin, indir, esyscmd, debugfile): Use new
methods.
(changesyntax, regexp): Optimize.
* m4/output.c (diversion_storage): Use typedef.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-29 22:01:26 -07:00
Eric Blake
17a806c257
Stage 3b: cache length, rather than computing it, in modules.
...
* m4/hash.c (m4_hash_remove): Avoid double free on remove
failure.
* m4/output.c (m4_shipout_string): Change semantics of len param.
(m4_shipout_int): Use cached length.
* m4/input.c (m4_push_string_finish): Likewise.
* modules/m4.h (m4_make_temp_func): Add parameter.
* m4/macro.c (expand_token, m4_arg_len): Use cached length.
(collect_arguments, expand_macro): Alter signature.
(trace_format): Don't use out-of-scope buffer.
(process_macro): All callers changed.
* m4/utility.c (m4_dump_args): Likewise.
* m4/symtab.c (m4_symbol_value_print): Likewise.
* modules/gnu.c (__file__, __program__, builtin, indir)
(m4symbols, mkdtemp, regexp_compile, regexp_substitute,
renamesyms, patsubst, regexp, regexp_compile): Likewise.
* modules/load.c (m4modules): Likewise.
* modules/m4.c (defn, m4wrap, maketemp, m4_make_temp)
(numb_obstack, ifdef, ifelse, divert, len, substr): Likewise.
* modules/perl.c (perleval): Likewise.
* modules/stdlib.c (getcwd, getenv, getlogin, getpwnam, getpwuid)
(hostname, uname, setenv): Likewise.
* modules/mpeval.c (numb_obstack): Likewise.
* src/freeze.c (dump_symbol_CB): Likewise.
* doc/m4.texinfo (Renamesyms, Dumpdef, Changesyntax): Adjust test.
* tests/builtins.at (mkstemp): Likewise.
* tests/others.at (iso8859): XFAIL this test, now that
length-based handling allows NUL through part but not all of M4.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-29 06:55:21 -07:00
Eric Blake
8e1fad3c14
Stage 3a: cache length, rather than computing it, in libm4.
...
* m4/m4module.h (struct m4_macro_args): Cache length.
(m4_get_symbol_len, m4_get_symbol_value_len): New accessors.
(m4_set_symbol_value_text): Change signature.
* m4/m4private.h (struct m4_symbol_value): Store string length.
(m4_get_symbol_value_text, m4_get_symbol_value_placeholder)
(m4_set_symbol_value_placeholder): Update accordingly.
(m4_set_symbol_value_text): Change signature.
(m4_get_symbol_value_len): New accessor.
* m4/input.c (struct m4_input_block, string_peek, string_read)
(string_unget, string_print, m4_push_string_finish)
(m4_push_wrapup): Track length of string input.
(m4__next_token): Adjust all users of symbol text to track length,
too.
* m4/macro.c (expand_argument, collect_arguments): Likewise.
* m4/module.c (install_macro_table): Likewise.
* modules/gnu.c (builtin, indir): Likewise.
* modules/m4.c (define, pushdef): Likewise.
* src/main.c (main): Likewise.
* src/freeze.c (reload_frozen_state): Likewise.
* m4/symtab.c (m4_symbol_value_copy): Likewise.
(m4_get_symbol_value_len): New function.
(m4_get_symbol_value_text, m4_get_symbol_value_placeholder)
(m4_set_symbol_value_text, m4_set_symbol_value_placeholder):
Adjust implementation.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-28 22:07:29 -07:00
Eric Blake
5d2ce0f461
Stage 2: use accessors, not direct reference, into argv.
...
* m4/m4private.h (m4_arg_argc): New fast accessor.
* m4/m4module.h (m4_arg_argc, m4_arg_symbol, m4_is_arg_text)
(m4_is_arg_func, m4_arg_text, m4_arg_len, m4_arg_func): New
prototypes.
(m4_builtin_func, M4BUILTIN, M4BUILTIN_HANDLER, m4_dump_args)
(m4_macro_call): Make argc unsigned.
(M4ARG): Use new accessors.
* modules/m4.c (define, pushdef): Likewise.
(undefine, popdef, ifelse, m4_dump_symbols, defn, undivert)
(traceon, traceoff): Make argc unsigned.
* modules/m4.h (m4_dump_symbols_func): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/gnu.c (builtin, indir): Use new accessors.
(changesyntax): Make argc unsigned.
* modules/perl.c (perleval): Likewise.
* m4/utility.c (m4_dump_args): Use new accessors.
* m4/macro.c (trace_pre): Likewise.
(m4_arg_symbol, m4_arg_argc, m4_is_arg_text, m4_is_arg_func)
(m4_arg_text, m4_arg_len, m4_arg_func): New functions.
(expand_macro, trace_pre, trace_post, m4_macro_call): Update argc
usage.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-27 19:10:43 -07:00
Eric Blake
14b2ffbb82
Stage 1: convert m4_symbol_value** into new object.
...
* ltdl/m4/gnulib-cache.m4: Import flexmember module.
* m4/m4module.h (m4_macro_args): New type, will be opaque to
modules later.
(m4_builtin_func, M4BUILTIN, M4BUILTIN_HANDLER, m4_dump_args)
(m4_macro_call): Alter signature to use m4_macro_args object.
(M4ARG): Redefine to access new struct.
* m4/m4private.h (M4_SYMBOL_COMP): New enumerator.
(struct m4_symbol_chain): New type.
(struct m4_symbol_value): Add chain alternative.
* m4/macro.c (collect_arguments): Build new struct.
(expand_macro, m4_macro_call, process_macro, trace_pre)
(trace_post): Adjust implementation to use it.
* m4/utility.c (m4_dump_args): Likewise.
* modules/gnu.c (builtin, indir): Likewise.
* modules/format.c (format): Likewise.
* modules/m4.h (m4_dump_symbols_func): Likewise.
* modules/m4.c (m4_dump_symbols, define, pushdef, defn, ifelse)
(shift, include, errprint, m4wrap): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-24 16:23:47 -07:00
Eric Blake
32ab6f9f81
Pass only macro name to utility functions.
...
* m4/m4module.h (m4_bad_argc, m4_numeric_arg): Adjust signature.
* m4/utility.c (m4_bad_argc, m4_numeric_arg): Adjust
implementation.
* m4/macro.c (m4_macro_call): Adjust callers.
* modules/gnu.c (builtin, debuglen): Likewise.
* modules/m4.c (ifelse, incr, decr, divert, undivert, m4exit)
(substr): Likewise.
* modules/evalparse.c (m4_evaluate): Likewise.
* modules/stdlib.c (setenv, getpwuid, srand): Likewise.
* modules/time.c (ctime, gmtime, localtime, mktime, strftime):
Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-24 07:04:18 -07:00
Eric Blake
b6c03a0e43
Add macro name to debugfile messages.
...
* m4/m4module.h (m4_debug_set_output): Add parameter.
* m4/debug.c (m4_debug_set_output, set_debug_file): Pass macro
name through.
* modules/gnu.c (debugfile): Adjust caller.
* modules/m4.c (m4exit): Likewise.
* src/main.c (main): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-23 16:14:17 -07:00
Eric Blake
f6e28cf9c7
Factor out handling of macro name in error messages.
...
* m4/m4module.h (m4_error, m4_error_at_line, m4_warn)
(m4_warn_at_line): Add new parameter.
* m4/utility.c (m4_verror_at_line): New helper method.
(m4_error, m4_error_at_line, m4_warn, m4_warn_at_line): Add new
parameter.
(m4_bad_argc, m4_numeric_arg, m4_parse_truth_arg): All callers
changed.
* m4/debug.c: Likewise.
* m4/input.c: Likewise.
* m4/macro.c: Likewise.
* m4/module.c: Likewise.
* m4/output.c: Likewise.
* m4/path.c: Likewise.
* modules/evalparse.c: Likewise.
* modules/format.c: Likewise.
* modules/gnu.c: Likewise.
* modules/load.c: Likewise.
* modules/m4.c: Likewise.
* modules/mpeval.c: Likewise.
* src/freeze.c: Likewise.
* src/main.c: Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-11-23 15:18:40 -07:00
Eric Blake
f9d8c9ac44
Never let printf failures go undetected.
...
* ltdl/m4/gnulib-cache.m4: Augment with 'gnulib-tool --import
xprintf'.
* m4/system_.h: Include xprintf.h.
* m4/debug.c (m4_debug_message_prefix, m4_debug_message): Wrap all
use of printf, xprintf.
* m4/input.c [DEBUG_INPUT]: Likewise.
* m4/module.c [DEBUG_MODULES]: Likewise.
* m4/output.c (m4_shipout_text, m4_shipout_int)
(m4_freeze_diversions): Likewise.
* m4/path.c [DEBUG_INCL]: Likewise.
* m4/symtab.c [DEBUG_SYM]: Likewise.
* m4/syntax.c [DEBUG_SYNTAX]: Likewise.
* modules/modtest.c (export_test): Likewise.
* src/freeze.c (produce_resyntax_dump, produce_syntax_dump)
(produce_module_dump, dump_symbol_CB, produce_frozen_state):
Likewise.
* src/main.c (usage): Likewise.
* po/POTFILES.in: Adjust to new file.
* po/Makevars (XGETTEXT_OPTIONS): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-10-22 14:57:28 -06:00
Eric Blake
8cdf04b3b2
Fix 'm4 -F file -t undefined'.
...
* src/freeze.c (produce_symbol_dump): Skip trace placeholders.
* src/freeze.c (dump_symbol_CB): Also skip void symbols.
* tests/freeze.at (reloading unknown builtin): Test for this bug.
* m4/m4module.h (m4_symtab_apply): Add parameter.
* m4/symtab.c (m4_symtab_apply): Ignore trace placeholders when
requested.
(m4_symtab_delete, symtab_dump): Adjust callers.
* modules/m4.c (m4_dump_symbols): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-10-18 10:45:16 -06:00
Eric Blake
394083c7c6
Fix regexp regression of 2007-09-29.
...
* modules/gnu.c (substitute): Allow NULL buf when no
subexpressions were present.
(regexp): Handle \ escapes even with empty regex.
* doc/m4.texinfo (Regexp, Patsubst): Catch this bug.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-10-09 13:55:37 -06:00
Eric Blake
2243fca7d2
Cache regex compilation for another autoconf speedup.
...
* modules/gnu.c (gnu_buf): Replace...
(REGEX_CACHE_SIZE, regex_cache): ...with new declarations.
(m4_pattern_buffer): Add fields.
(m4_regexp_compile): Rename...
(regexp_compile): ...to this, and drop no_sub parameter.
Implement caching.
(M4FINISH_HANDLER): Clean up entire cache.
(m4_regexp_search): Rename...
(regex_search): ...to this, adjust to new struct contents, and add
no_sub parameter.
(m4_regexp_substitute): Rename...
(regexp_substitute): ...to this.
(substitute, patsubst, regexp, renamesyms): Adjust callers.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-10-09 12:16:29 -06:00
Eric Blake
22f445f465
Another Autoconf usage pattern optimization.
...
* modules/m4.c (m4_index): Optimize search for one byte.
* doc/m4.texinfo (Index macro, Regexp, Patsubst): Test the new
code paths.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-10-06 07:08:55 -06:00
Eric Blake
7dab2c5188
Optimize for Autoconf usage pattern.
...
* modules/gnu.c (regexp, patsubst): Handle empty regex faster.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-10-06 07:08:54 -06:00
Eric Blake
b9ade95dc1
Create .gitignore alongside .cvsignore.
...
* bootstrap (version control): Update to reflect git usage.
Signed-off-by: Eric Blake <ebb9@byu.net>
2007-10-06 07:08:53 -06:00
Gary V. Vaughan
b7604d14c0
Be consistent about using 'module' for m4_module types and
...
'handle' for lt_dlhandle types:
* m4/m4private.h (m4_symbol_value): Rename handle element to
method. Changed all references.
(VALUE_MODULE, SYMBOL_MODULE): Renamed from VALUE_HANDLE and
SYMBOL_HANDLE respectively. Changed all references.
* m4/m4module.h (M4INIT_HANDLER, M4FINISH_HANDLER): Ditto.
* m4/builtin.c (m4_builtin_find_by_name)
(m4_builtin_find_by_func): Use module as the parameter name for
pointers of type 'm4_module'.
* m4/module.c (module_remove, m4_get_module_name)
(install_builtin_table, install_macro_table)
(m4_module_make_resident, m4__module_next, m4_module_refcount):
Ditto.
* src/freeze.c (produce_module_dump): Ditto.
* m4/input.c (m4_input_block): Rename handle element to method.
Changed all references.
* m4/symtab.c (m4__symtab_remove_module_references): Ditto.
* modules/load.c: Use module as the variable name for pointers
of type 'm4_module'.
* modules/m4.c: Ditto.
* modules/perl.c: Ditto.
* modules/shadow.c: Ditto.
2007-10-06 07:08:51 -06:00
Eric Blake
7b41678d97
Add refcount builtin.
...
* modules/load.c (refcount): New builtin.
(m4modules): Use correct type.
* doc/m4.texinfo (Refcount): New section.
* m4/m4private.h (struct m4_module): Add refcount member.
(m4_module_refcount) [NDEBUG]: Add faster accessor macro.
* m4/module.c (m4_module_load): Add symbols to table on first
load by m4, regardless of other libltdl loads of same module.
(m4_module_refcount): Use new struct member, rather than relying
on libltdl count which might be inflated by unrelated loads.
(m4__module_interface): Optimize.
(m4__module_next, m4__module_find): Avoid assertions that could
trigger with unrelated libltdl loads.
(m4__module_open): Track m4 load count.
(m4__module_exit): Only unload what m4 loaded.
(module_remove): Track m4 unloads.
* NEWS: Document new builtin.
2007-10-06 07:08:50 -06:00
Eric Blake
4ebe196152
Wrap lt_dlhandle in struct m4_module.
...
* m4/m4module.h (includes): No longer require clients to know
about lt_dlhandle.
(m4_module): New opaque declaration.
(m4_export): Delete unused type.
(M4INIT_HANDLER, M4FINISH_HANDLER, m4_module_init_func)
(m4_module_finish_func, m4_module_load, m4_get_module_name)
(m4_builtin_find_by_name, m4_builtin_find_by_func): Use new
wrapper.
(m4_module_makeresident, m4_module_refcount): New declarations.
* m4/m4private.h (includes): Move <ltdl.h> here.
(m4_module): New declaration. Simple for now, but intended for
growth.
(m4__module_open, m4__module_next, m4__module_find)
(m4__symtab_remove_module_references): Use new wrapper.
* m4/builtin.c (m4_builtin_find_by_name, m4_builtin_find_by_func):
Likewise.
* m4/module.c (m4_get_module_name, m4_module_import)
(m4_module_load): Likewise.
(install_builtin_table, install_macro_table): Likewise. Also,
change return type since these always returned NULL and no one
used the result.
(m4_module_makereside
2007-10-06 07:08:48 -06:00
Eric Blake
5ced71a68d
Normalize all GPL license notices.
...
* m4/COPYING.LIB: Delete - libm4 is not distributed under LGPLv2
at this time.
* Makefile.am: Update license wording.
* bootstrap: Likewise.
* commit: Likewise.
* configure.ac: Likewise.
* ltdl/config/mailnotify: Likewise.
* ltdl/config/mkstamp: Likewise.
* ltdl/m4/debug.m4: Likewise.
* ltdl/m4/gmp.m4: Likewise.
* ltdl/m4/m4-error.m4: Likewise.
* ltdl/m4/m4-getopt.m4: Likewise.
* ltdl/m4/m4-gettext.m4: Likewise.
* ltdl/m4/m4-obstack.m4: Likewise.
* ltdl/m4/m4-regex.m4: Likewise.
* ltdl/m4/stackovf.m4: Likewise.
* m4/builtin.c: Likewise.
* m4/debug.c: Likewise.
* m4/hash.c: Likewise.
* m4/hash.h: Likewise.
* m4/input.c: Likewise.
* m4/m4.c: Likewise.
* m4/m4module.h: Likewise.
* m4/m4private.h: Likewise.
* m4/macro.c: Likewise.
* m4/module.c: Likewise.
* m4/output.c: Likewise.
* m4/path.c: Likewise.
* m4/resyntax.c: Likewise.
* m4/symtab.c: Likewise.
* m4/syntax.c: Likewise.
* m4/system_.h: Likewise.
* m4/utility.c: Likewise.
* modules/evalp
2007-10-06 07:08:43 -06:00
Eric Blake
4755abc0ee
Upgrade to GPLv3, and document 1.4.10.
...
* bootstrap: Adjust to GPLv3.
(func_update): Port from branch.
* ltdl/m4/gnulib-cache.m4: Augment with 'gnulib-tool
--local-dir=local --import gpl-3.0'.
* doc/m4.texinfo (History): Mention 1.4.11.
(Copying This Package): New appendix.
* NEWS: Document 1.4.10.
* local/doc/gpl-3.0.texi.diff: New file.
* Makefile.am: Update license.
(doc_m4_TEXINFOS, EXTRA_DIST): Distribute additions.
* commit: Update license.
* configure.ac: Likewise.
* ltdl/config/mailnotify: Likewise.
* ltdl/config/mkstamp: Likewise.
* ltdl/m4/debug.m4: Likewise.
* ltdl/m4/gmp.m4: Likewise.
* ltdl/m4/m4-error.m4: Likewise.
* ltdl/m4/m4-getopt.m4: Likewise.
* ltdl/m4/m4-gettext.m4: Likewise.
* ltdl/m4/m4-obstack.m4: Likewise.
* ltdl/m4/m4-regex.m4: Likewise.
* ltdl/m4/stackovf.m4: Likewise.
* m4/builtin.c: Likewise.
* m4/debug.c: Likewise.
* m4/hash.c: Likewise.
* m4/hash.h: Likewise.
* m4/input.c: Likewise.
* m4/m4.c: Likewise.
* m4/m4module.h: Likewise.
* m4/m4private.
2007-10-06 07:08:39 -06:00
Eric Blake
b72bd79d0b
* modules/format.c (format): Avoid undefined behavior with %c.
2007-10-06 07:08:38 -06:00
Eric Blake
4f82b1e376
Add extension to divert builtin.
...
* modules/m4.c (builtin_divert): Immediately divert second
argument.
* m4/output.c (m4_output_text): Allow 0 length. Fixes regression
from two days ago.
(m4_shipout_text): Short-circuit on zero length.
* tests/freeze.at (loading format 2): Expand test to catch
regression. Also check out-of-range version.
* tests/builtins.at (divert): Expand test to check corner cases
of extension.
* NEWS: Document the extension.
Reported by Daniel Richard G.
2007-10-06 07:08:36 -06:00
Eric Blake
e12ff51c9c
Port format improvements from branch.
...
* doc/m4.texinfo (History): Mention upcoming 1.4.10 release.
(Format): Enhance section.
* modules/format.c (format): Accept %'hhd, and issue warnings on
unrecognized specifiers.
* modules/gnu.c (builtin_format): Adjust how format is called.
2007-10-06 07:08:35 -06:00
Eric Blake
fa8768bc7a
Provide consistent shift semantics regardless of hardware.
...
* modules/m4.c (numb_lshift, numb_rshift, numb_urshift): Mask
before shifting.
(number, unumber): Always use [u]intmax_t.
Reported by Gary V. Vaughan.
2007-10-06 07:08:30 -06:00