]> git.ipfire.org Git - thirdparty/bash.git/commitdiff
commit bash-20140307 snapshot
authorChet Ramey <chet.ramey@case.edu>
Fri, 21 Mar 2014 18:14:28 +0000 (14:14 -0400)
committerChet Ramey <chet.ramey@case.edu>
Fri, 21 Mar 2014 18:14:28 +0000 (14:14 -0400)
32 files changed:
CWRU/CWRU.chlog
CWRU/CWRU.chlog~ [new file with mode: 0644]
CWRU/POSIX.NOTES.old [new file with mode: 0644]
CWRU/old/set.def.save [new file with mode: 0644]
CWRU/save/unwind_prot.h.save [new file with mode: 0644]
autom4te.cache/output.0
autom4te.cache/output.1
autom4te.cache/output.1t [new file with mode: 0644]
autom4te.cache/requests
autom4te.cache/traces.0
autom4te.cache/traces.1
autom4te.cache/traces.1t [new file with mode: 0644]
builtins/return.def~ [new file with mode: 0644]
cross-build/cygwin32.cache.old [new file with mode: 0644]
doc/FAQ.orig [new file with mode: 0644]
doc/bash.1
doc/bashref.texi
examples/loadables/Makefile.in.save [new file with mode: 0644]
execute_cmd.c
execute_cmd.c~ [new file with mode: 0644]
lib/readline/doc/Makefile.old [new file with mode: 0644]
lib/readline/examples/rl-callbacktest.c
lib/readline/readline.c
lib/readline/rlprivate.h
lib/readline/vi_mode.c
parse.y
parse.y~ [new file with mode: 0644]
pcomplete.c
tests/misc/regress/log.orig [new file with mode: 0644]
tests/misc/regress/shx.orig [new file with mode: 0644]
trap.c
trap.c~ [new file with mode: 0644]

index ba482f91dd3c9cd60f7d70026a845ffc671e75ae..8b534574e3eea1b7a1e07c4cc954a56641a940dd 100644 (file)
@@ -5874,3 +5874,39 @@ test.c
          find_variable
        - test_unop: add back missing 'R' case.  Fixes bug reported by
          NBaH <nbah@sfr.fr>
+
+                                   3/7
+                                   ---
+pcomplete.c
+       - pcomp_curtxt: new variable, holds the original text to be completed
+         as passed to the programmable completion code
+       - pcomp_filename_completion_function: if we are running compgen
+         (presumably in a shell function completion) and performing readline
+         completion, check the word being completed.  If it's not empty, but
+         the original word passed to the programmable completion code is an
+         empty string (""), call a dequoting function if one is available.
+         This compensates for an assumption in bash-completion.  Reported by
+         Albert Shih <Albert.Shih@obspm.fr>
+
+lib/readline/readline.c
+       - _rl_dispatch_subseq: when deciding whether or not to set vi mode's
+         idea of the last command, use whether or not the dispatching keymap
+         is vi_movement_keymap instead of the key sequence length.  The `c',
+         `d', and `y' commands all take motion commands as `arguments' and
+         will produce key sequences longer than 1 character.  The arrow keys
+         will end up dispatching out of a different keymap, so the test will
+         prevent arrow keys from setting the last command (the problem in
+         bash-4.2). Bug report from Daan van Rossum <daan@flash.uchicago.edu>
+
+lib/readline/vi_mode.c
+       - _rl_vi_motion_command: convenience function to test whether a key is
+         a vi-mode motion command
+
+lib/readline/rlprivate.h
+       - _rl_vi_motion_command: extern declaration
+
+parse.y
+       - parse_matched_pair: we should not skip processing single quotes in
+         posix mode if dolbrace_state == DOLBRACE_QUOTE2 (pattern
+         substitution).  Fixes bug reported by David Sines
+         <dave.gma@googlemail.com>
diff --git a/CWRU/CWRU.chlog~ b/CWRU/CWRU.chlog~
new file mode 100644 (file)
index 0000000..c9a9e55
--- /dev/null
@@ -0,0 +1,5906 @@
+                                2/14/2011
+                                ---------
+[bash-4.2 released]
+
+                                  2/15
+                                  ----
+lib/glob/gmisc.c
+       - fix wmatchlen and umatchlen to avoid going past the end of the
+         string on an incomplete bracket expression that ends with a
+         NUL.  Partial fix for bug reported by Clark Wang <dearvoid@gmail.com>
+
+                                  2/16
+                                  ----
+subst.h
+       - new string extract flag value: SX_WORD.  Used when calling
+         extract_dollar_brace_string to skip over the word in
+         ${param op word} from parameter_brace_expand
+
+subst.c
+       - change parameter_brace_expand to add SX_WORD to flags passed to
+         extract_dollar_brace_string
+       - change parameter_brace_expand to use SX_POSIXEXP for all non-posix
+         word expansion operators that treat single quotes as special, not
+         just % and #
+       - change extract_dollar_brace_string to initialize dolbrace_state to
+         DOLBRACE_WORD if SX_WORD flag supplied and we shouldn't use
+         DOLBRACE_QUOTE.  Fixes bug reported by Juergen Daubert <jue@jue.li>
+
+doc/{bash.1,bashref.texi}
+       - document the exact expansions here strings undergo
+
+                                  2/17
+                                  ----
+lib/readline/vi_mode.c
+       - make sure that `dd', `cc', and `yy' call vidomove_dispatch from
+         rl_domove_read_callback.  Fixes bug reported by Clark Wang
+         <dearvoid@gmail.com>
+
+lib/readline/callback.c
+       - make sure _rl_internal_char_cleanup is called after the
+         vi-motion callbacks (rl_vi_domove_callback) in rl_callback_read_char.
+         Companion to above fix
+
+doc/{bash.1,bashref.texi}
+       - make sure that the text describing the rhs of the == and =~
+         operators to [[ states that only the quoted portion of the pattern
+         is matched as a string
+
+                                  2/18
+                                  ----
+lib/glob/gmisc.c
+       - better fix for umatchlen/wmatchlen: keep track of the number of
+         characters in a bracket expression as the value to increase
+         matchlen by if the bracket expression is not well-formed.  Fixes
+         bug reported by Clark Wang <dearvoid@gmail.com>
+
+subst.c
+       - change expand_string_for_rhs so that it sets the W_NOSPLIT2 flag
+         in the word flags.  We will not perform word splitting or quote
+         removal on the result, so we do not want to add quoted nulls if
+         we see "" or ''.  Fixes bug reported by Mike Frysinger
+         <vapier@gentoo.org>
+
+                                  2/19
+                                  ----
+variables.c
+       - new function, int chkexport(name), checks whether variable NAME is
+         exported and remakes the export environment if necessary.  Returns
+         1 if NAME is exported and 0 if not
+       - call chkexport(name) to get tzset to look at the right variable in
+         the environment when modifying TZ in sv_tz.  Don't call tzset if
+         chkexport doesn't indicate that the variable is exported
+
+variables.h
+       - new extern declaration for chkexport
+
+
+{parse.y,builtins/printf.def}
+       - call sv_tz before calling localtime() when formatting time strings
+         in prompt strings or using printf.  Fixes bug reported by
+         Dennis Williamson <dennistwilliamson@gmail.com>
+
+execute_cmd.c
+       - modify fix of 2/9 to add casts when those variables are passed to
+         functions; some compilers throw errors instead of warnings.  Report
+         and fix from Joachim Schmitz <jojo@schmitz-digital.de>
+
+support/shobj-conf
+       - add a stanza for nsk on the Tandem from Joachim Schmitz
+         <jojo@schmitz-digital.de>
+
+{shell,lib/readline/shell}.c
+       - Tandem systems should use getpwnam (getlogin()); for some reason
+         they don't do well with using getuid().  Fix from Joachim Schmitz
+         <jojo@schmitz-digital.de>
+
+                                   3/1
+                                   ---
+variables.c
+       - make sure that the return value from find_variable is non-null
+         before trying to use it in chkexport.  Fixes bug reported by
+         Evangelos Foutras <foutrelis@gmail.com>
+
+                                   3/3
+                                   ---
+parse.y
+       - when adding $$ to the current token buffer in read_token_word(),
+         don't xmalloc a buffer for two characters and then strcpy it, just
+         copy the characters directly into the token buffer.  Fix from
+         Michael Whitten <mfwitten@gmail.com>
+
+execute_cmd.c
+       - fix expand_word_unsplit to add the W_NOSPLIT2 flag to the word to
+         be expanded, so "" doesn't add CTLNUL.  Similar to fix of 2/18 to
+         expand_string_for_rhs.  Fixes bug reported by Nathanael D. Noblet
+         <nathanael@gnat.ca> and Matthias Klose <doko@debian.org>
+
+parse.y
+       - fix extended_glob case of read_token_word to allocate an extra
+         space in the buffer for the next character read after the extended
+         glob specification if it's a CTLESC or CTLNUL.  Report and fix from
+         Michael Witten <mfwitten@gmail.com>
+       - fix shell expansions case of read_token_word to allocate an extra
+         space in the buffer for the next character read after the shell
+         expansion if it's a CTLESC or CTLNUL.  Report and fix from
+         Michael Witten <mfwitten@gmail.com>
+       - TENTATIVE: fix read_token_word to reduce the amount of buffer space
+         required to hold the translated and double-quoted value of $"..."
+         strings.  Report and fix from Michael Witten <mfwitten@gmail.com>
+       - change code around got_character and got_escaped_character labels to
+         make sure that we call RESIZE_MALLOCED_BUFFER before adding the
+         CTLESC before a CTLESC or CTLNUL, and before adding the character if
+         we're not adding a CTLESC.  Report and fix from
+         Michael Witten <mfwitten@gmail.com>
+
+subst.c
+       - new param flags value, PF_ASSIGNRHS, mirrors W_ASSIGNRHS, noting that
+         parameter expansion is on rhs of assignment statement.  That inhibits
+         word splitting
+       - change param_expand to call string_list_dollar_at with quoted == 1
+         if PF_ASSIGNRHS is set, so it will quote IFS characters in the
+         positional parameter before separating them with the first char of
+         $IFS.  This keeps the rhs from being split inappropriately.  Fixes
+         bug reported by Andres Perera <andres.p@zoho.com>
+
+                                   3/4
+                                   ---
+lib/readline/bind.c
+       - add a missing free of `names' in rl_function_dumper.  Bug report
+         and fix from Michael Snyder <msnyder@vmware.com>
+
+                                   3/5
+                                   ---
+lib/readline/rltty.c
+       - change rl_deprep_terminal so it uses fileno (stdin) for the tty fd
+         if rl_instream is not set, like rl_prep_terminal
+
+                                   3/6
+                                   ---
+lib/readline/display.c
+       - fix rl_message to use a dynamically-allocated buffer instead of a
+         fixed-size buffer of 128 chars for the `local message prompt'.  Bug
+         report and fix from Micah Cowan <micah@cowan.name>
+
+                                   3/7
+                                   ---
+jobs.c
+       - add sentinel to wait_sigint_handler so it only sets wait_sigint_received
+         if waiting_for_child is non-zero; otherwise, it restores the old
+         SIGINT handler and sends itself the SIGINT
+       - set waiting_for_child around the calls to waitchld that use it to
+         synchronously wait for a process
+       - change logic that decides whether or not the child process blocked
+         or handled SIGINT based on whether or not waitpid returns -1/EINTR
+         and the shell receives a SIGINT and the child does not exit.  If
+         the child later exits due to SIGINT, cancel the assumoption that it
+         was handled
+       - instead of testing whether or not the child exited due to SIGINT
+         when deciding whether the shell should act on a SIGINT it received
+         while waiting, test whether or not we think the child caught
+         SIGINT.  If it did, we let it go (unless the shell has it trapped);
+         if it did not catch it, the shell acts on the SIGINT.  Fix from
+         Linus Torvalds <torvalds@linux-foundation.org>, bug report originally
+         from Oleg Nesterov <oleg@redhat.com>
+
+                                   3/8
+                                   ---
+shell.c
+       - initialize no_line_editing to 1 if READLINE is not defined -- we
+         can't have line editing without readline
+
+                                  3/12
+                                  ----
+lib/readline/signals.c
+       - add SIGHUP to the set of signals readline handles
+
+lib/readline/doc/rltech.texi
+       - document that SIGHUP is now part of the set of signals readline
+         handles
+
+lib/readline/input.c
+       - if _rl_caught_signal indicates that read() was interrupted by a
+         SIGHUP or SIGTERM, return READERR or EOF as appropriate
+       - call rl_event_hook, if it's set, if call to read in rl_getc
+         returns -1/EINTR.  If rl_event_hook doesn't do anything, this
+         continues the loop as before.  This handles the other fatal
+         signals
+
+execute_cmd.c
+       - add a couple of QUIT; calls to execute_disk_command and
+         execute_simple_command to improve responsiveness to interrupts
+         and fatal signals
+
+input.c
+       - rearrange getc_with_restart so that the return values from read()
+         are handled right
+
+parse.y
+       - don't need to set terminate_immediately in yy_stream_get, since
+         getc_with_restart checks for terminating signals itself
+       - since readline returns READERR on SIGHUP or SIGTERM, don't need
+         to set terminate_immediately.  Still doesn't handle other
+         signals well -- will have to check that some more
+
+bashline.c
+       - new function, bash_event_hook, for rl_event_hook.  Just checks for
+         terminating signals and acts on them using CHECK_TERMSIG.
+       - set rl_event_hook to bash_event_hook
+
+builtins/read.def
+       - take out setting terminate_immediately; add calls to CHECK_TERMSIG
+         after read calls
+
+doc/{bash.1,bashref.texi}
+       - move the text describing the effect of negative subscripts used to
+         reference indexed array elements to the paragraphs describing
+         ${parameter[subscript]}, since that's where they are implemented.
+         Pointed out by Christopher F. A. Johnson <cfajohnson@gmail.com>
+
+arrayfunc.[ch],subst.c
+       - array_expand_index now takes a new first argument: a SHELL_VAR *
+         of the array variable being subscripted.  Can be used later to fully
+         implement negative subscripts
+
+                                  3/14
+                                  ----
+lib/glob/glob.c
+       - fix mbskipname to not turn the directory entry name into a wide char
+         string if the conversion of the pattern to a wide char string fails
+       - fix mbskipname to call skipname if either the pattern or the filename
+         can't be converted into a wide-char string
+
+lib/glob/xmbsrtowcs.c
+       - fix xdupmbstowcs2 to handle return value of 0 from mbsnrtowcs and
+         short-circuit with failure in that case.  Fixes bug reported by
+         Roman Rakus <rrakus@redhat.com>
+
+                                  3/15
+                                  ----
+bashline.c
+       - new variable, bash_filename_quote_characters to store the value
+         assigned to rl_filename_quote_characters so it can be restored
+         if changed.
+       - change bashline_reset and attempt_shell_completion to restore
+         rl_filename_quote_characters if not set to default
+
+                                  3/22
+                                  ----
+lib/glob/glob.c
+       - wdequote_pathname falls back to udequote_pathname if xdupmbstowcs
+         fails to convert the pathname to a wide-character string
+
+lib/glob/xmbsrtowcs.c
+       - xdupmbstowcs2: change to fix problem with leading '\\' (results in
+         nms == 0, which causes it to short-circuit with failure right
+         away).  Fixes bug pointed out by Werner Fink <werner@suse.de>
+       - xdupmbstowcs2: compensate for mbsnrtowcs returning 0 by taking the
+         next single-byte character and going on
+       - xdupmbstowcs2: change memory allocation to increase by WSBUF_INC
+         bytes; try to avoid calls to realloc (even if they don't actually
+         result in more memory being allocated)
+
+                                  3/24
+                                  ----
+doc/{bash.1,bashref.texi}
+       - slightly modify BASH_SUBSHELL description based on complaint from
+         Sam Liddicott <sam@liddicott.com>
+
+                                  3/25
+                                  ----
+trap.c
+       - change free_trap_strings to not call free_trap_string for signals
+         that are being ignored, like reset_or_restore_signal_handlers.
+         Fixes bug reported by Satoshi Takahashi <blue3waters@gmail.com>
+
+                                  3/26
+                                  ----
+lib/readline/rltypedefs.h
+       - remove old Function/VFunction/CPFunction/CPPFunction typedefs as
+         suggested by Tom Tromey <tromey@redhat.com>
+
+lib/readline/rlstdc.h
+       - move defines for USE_VARARGS/PREFER_STDARG/PREFER_VARARGS from
+         config.h.in to here because declaration of rl_message in
+         readline.h uses the defines.  This makes it hard for another packages
+         to use after the header files are installed, since config.h is not
+         one of the installed files.  Suggested by Tom Tromey
+         <tromey@redhat.com>
+
+                                  3/27
+                                  ----
+print_cmd.c
+       - change indirection_string from a static buffer to a dynamic one
+         managed by indirection_level_string(), so we don't end up truncating
+         PS4.  Suggested by Dennis Williamson <dennistwilliamson@gmail.com>
+
+lib/readline/shell.c
+       - change sh_set_lines_and_columns to use static buffers instead of
+         allocating the buffers to pass to setenv/putenv
+
+lib/readline/terminal.c
+       - change _rl_get_screen_size to not call sh_set_lines_and_columns if
+         ignore_env == 0
+       - _rl_sigwinch_resize_terminal: new function to just retrieve terminal
+         size, ignoring environment
+
+lib/readline/rlprivate.h
+       - new external declaration for _rl_sigwinch_resize_terminal() (currently
+         unused)
+
+lib/readline/signals.c
+       - rl_sigwinch_handler: set _rl_caught_signal to SIGWINCH
+       - rl_sigwinch_handler: don't immediately call rl_resize_terminal; just
+         leave _rl_caught_signal set for RL_CHECK_SIGNALS to handle
+       - _rl_signal_handler: call rl_resize_terminal if sig == SIGWINCH.
+         Should fix hang when sending multiple repeated SIGWINCH reported by
+         Henning Bekel <h.bekel@googlemail.com>
+
+                                  3/29
+                                  ----
+lib/sh/snprintf.c
+       - include math.h for any defines for isinf/isnan
+       - use code from gnulib documentation to implement isinf/isnan if they
+         are not defined
+
+configure.in
+       - don't check for isinf or isnan; c99 says they're macros anyway
+
+config.h.in
+       - remove defines for ISINF_IN_LIBC and ISNAN_IN_LIBC, no longer used
+         by snprintf.c
+
+                                   4/2
+                                   ---
+braces.c
+       - brace_gobbler: fix to understand double-quoted command substitution,
+         since the shell understands unquoted comsubs.  Fixes bug reported
+         by Michael Whitten <mfwitten@gmail.com>
+
+lib/readline/display.c
+       - include <pc.h> on MDOS
+       - get and set screen size using DJGPP-specific calls on MSDOS
+       - move cursor up clear screen using DJGPP-specific calls
+       - don't call tputs on DJGPP; there is no good terminfo support
+
+lib/readline/terminal.c
+       - include <pc.h> on MDOS
+       - get and set screen size using DJGPP-specific calls on MSDOS
+       - use DJGPP-specific initialization on MSDOS, zeroing all the
+         _rl_term_* variables
+       - don't call tputs on DJGPP; there is no good terminfo support
+         DJGPP support from Eli Zaretskii  <eliz@gnu.org>
+
+                                   4/6
+                                   ---
+
+config-top.h
+       - change DEFAULT_PATH_VALUE to something more useful and modern
+
+                                   4/8
+                                   ---
+tests/printf2.sub
+       - make sure LC_ALL and LC_CTYPE are set so LANG assignment takes effect.
+         Reported by Cedric Arbogast <arbogast.cedric@gmail.com>
+
+                                  4/11
+                                  ----
+include/chartypes.h
+       - fix a couple of dicey defines (though ones that don't cause any
+         compiler warnings) in IN_CTYPE_DOMAIN
+
+doc/{bashref.texi,bash.1}
+       - add note referring to duplicating file descriptors in sections
+         describing redirecting stdout and stderr and appending to stdout
+         and stderr.  Suggested by Matthew Dinger <mdinger.bugzilla@gmail.com>
+
+pcomplete.c
+       - it_init_helptopics: new function to support completing on help topics,
+         not just builtins
+       - it_helptopics: new programmable completion list of help topics
+       - build list of helptopic completions in gen_action_completions on
+         demand
+
+pcomplete.h
+       - new extern declaration for it_helptopics
+
+builtins/complete.def
+       - the `helptopic' action now maps to CA_HELPTOPIC intead of CA_BUILTIN,
+         since there are more help topics than just builtins.  Suggested by
+         Clark Wang <dearvoid@gmail.com>
+
+                                  4/12
+                                  ----
+print_cmd.c
+       - fix print_arith_for_command to add a call to PRINT_DEFERRED_HEREDOCS
+         before ending the body of the command, so heredocs get attached to
+         the right command instead of to the loop.  From gentoo bug 363371
+         http://bugs.gentoo.org/show_bug.cgi?id=363371
+
+execute_cmd.c
+       - change coproc_pidchk to unset the appropriate shell variables when
+         the (currently single) known coproc pid terminates
+       - cleanup and new functions to fully support multiple coprocesses when
+         and if I decide to go there
+
+                                  4/13
+                                  ----
+print_cmd.c
+       - fix print_group_command to add a call to PRINT_DEFERRED_HEREDOCS
+         after call to make_command_string_internal before printing closing
+         `}'
+       - fix make_command_string_internal to add a call to
+         PRINT_DEFERRED_HEREDOCS after recursive call to
+         make_command_string_internal in case cm_subshell before printing
+         closing `)'
+
+                                  4/14
+                                  ----
+print_cmd.c
+       - change overlapping strcpy in named_function_string to memmove
+
+sig.h
+       - UNBLOCK_SIGNAL: convenience define, same as UNBLOCK_CHILD, just
+         restores an old signal mask
+
+trap.c
+       - set_signal: instead of setting the signal handler to SIG_IGN while
+         installing the new trap handler, block the signal and unblock it
+         after the new handler is installed.  Fixes bug reported by Roman
+         Rakus <rrakus@redhat.com>
+
+                                  4/15
+                                  ----
+doc/{bash.1,bashref.texi}
+       - make it clear that enabling monitor mode means that all jobs run in
+         separate process groups
+
+                                  4/18
+                                  ----
+builtins/fc.def
+       - update fix of 4/15/2010 to not take saved_command_line_count into
+         account when stepping down the history list to make sure that
+         last_hist indexes something that is valid.  Fixes bug reported by
+         <piuma@piumalab.org>
+
+                                  4/19
+                                  ----
+builtins/fc.def
+       - fc_gethnum: make sure the calculation to decide the last history
+         entry is exactly the same as fc_builtin.  Fixes bug uncovered by
+         fix of 4/18 to stop seg fault
+
+                                  4/22
+                                  ----
+lib/readline/terminal.c
+       - change _rl_enable_meta_key to set a flag indicating that it sent the
+         enable-meta sequence
+       - _rl_disable_meta_key: new function to turn off meta mode after we
+         turned it on with _rl_enable_meta_key
+
+lib/readline/rlprivate.h
+       - extern declaration for _rl_disable_meta_key
+
+configure.in
+       - if not cross-compiling, set CFLAGS_FOR_BUILD from any CFLAGS inherited
+         from the environment.  Fixes HP/UX build problem reported by
+         "Daniel Richard G." <skunk@iSKUNK.ORG>
+
+                                  4/26
+                                  ----
+config-top.h
+       - define MULTIPLE_COPROCS to 0 so the code is still disabled but easy
+         to enable via configure option or editing this file
+
+                                  4/29
+                                  ----
+lib/sh/eaccess.c
+       - freebsd provides faccessat, with the same misfeature as their eaccess
+         and access implementations (X_OK returns true for uid==0 regardless
+         of the actual file permissions), so reorganize code to check the
+         file permissions as with eaccess.  Report and fix from Johan Hattne
+         <johan.hattne@utsouthwestern.edu>
+
+                                   5/2
+                                   ---
+doc/{bash.1,bashref.texi}
+       - add forward reference to `Pattern Matching' from `Pathname
+         Expansion', suggested by Greg Wooledge <wooledg@eeg.ccf.org>
+
+                                   5/5
+                                   ---
+pcomplib.c
+       - the bash_completion project now distributes over 200 completions
+         for various programs, with no end in sight, so increase the value
+         of COMPLETE_HASH_BUCKETS from 32 to 128
+
+pathexp.c
+       - quote_string_for_globbing: make sure CTLESC quoting CTLESC is
+         translated into \<CTLESC> even if the flags include QGLOB_REGEXP.
+         We don't want to process the second CTLESC as a quote character.
+         Fixes bug reported by Shawn Bohrer <sbohrer@rgmadvisors.com>
+
+                                   5/6
+                                   ---
+builtins/printf.def
+       - change PRETURN to not call fflush if ferror(stdout) is true
+       - if a call to one of the stdio functions or printstr leaves
+         ferror(stdout) true, and PRETURN is going to be called, let PRETURN
+         print the error message rather than doubling up the messages.  Fixes
+         problem reported by Roman Rakus <rrakus@redhat.com>
+
+                                   5/9
+                                   ---
+doc/{bash.1,bashref.texi}
+       - add note to the effect that lists inside compound command can be
+         terminated by newlines as well as semicolons.  Suggested by
+         Roman Byshko <rbyshko@gmail.com>
+
+                                  5/10
+                                  ----
+subst.c
+       - remove_quoted_nulls: fix problem that caused it to skip over the
+         character after a CTLNUL, which had the effect of skipping every
+         other of a series of CTLNULs.  Fixes bug reported by
+         Marten Wikstrom <marten.wikstrom@keystream.se>
+
+                                  5/11
+                                  ----
+subst.c
+       - extract_process_subst: add SX_COMMAND flag to call to
+         extract_delimited_string, since we're expanding the same sort of
+         command as command substitution.  Fixes bug reported in Ubuntu
+         bug 779848
+
+                                  5/12
+                                  ----
+configure.in
+       - set the prefer_shared and prefer_static variables appropriately
+         depending on the value of $opt_static_link
+
+aclocal.m4
+       - AC_LIB_LINKFLAGS_BODY: change to not prefer shared versions of the
+         libraries it's searching for if the prefer_shared variable is "no".
+         Fixes problem reported by Cedric Arbogast <arbogast.cedric@gmail.com>
+
+                                  5/13
+                                  ----
+lib/readline/readline.c
+       - _rl_internal_teardown: add call to _rl_disable_meta_key to make the
+         meta key active only for the duration of the call to readline()
+       - _rl_internal_setup: move call to _rl_enable_meta_key here from
+         readline_initialize_everything so the meta key is active only for
+         the duration of the call to readline().  Suggestion from Miroslav
+         Lichvar <mlichvar@redhat.com>
+
+builtins/help.def
+       - help_builtin: change strncmp to strcmp so that `help read' no longer
+         matches `readonly'.  Suggested by Clark Wang <dearvoid@gmail.com>
+
+config.h.in
+       - add define for GLIBC21, checked using jm_GLIBC21 as part of the tests
+         for libintl
+
+lib/malloc/malloc.c
+       - internal_free: don't use the cached value of memtop when deciding
+         whether or not to adjust the break and give memory back to the kernel
+         when using the GNU C library, since glibc uses sbrk for its own
+         internal purposes.  From Debian bug 614815, reported by Samuel
+         Thibault <samuel.thibault@gnu.org>
+
+aclocal.m4
+       - BASH_STRUCT_WEXITSTATUS_OFFSET: change AC_RUN_IFELSE to AC_TRY_RUN
+         to avoid warning about not using AC_LANG_SOURCE
+
+                                  5/14
+                                  ----
+bashline.[ch]
+       - two new functions, bashline_set_event_hook and bashline_reset_event_hook,
+         to set rl_event_hook to bash_event_hook and back to NULL, respectively
+       - don't set rl_event_hook unconditionally
+
+sig.c
+       - termsig_sighandler: if the shell is currently interactive and
+         readline is active, call bashline_set_event_hook to cause
+         termsig_handler to be called via bash_event_hook when the shell
+         returns from the signal handler
+
+                                  5/15
+                                  ----
+lib/readline/display.c
+       - _rl_col_width: Mac OS X has a bug in wcwidth: it does not return 0
+         for UTF-8 combining characters.  Added workaround dependent on
+         MACOSX.  Fixes problem pointed out by Thomas De Contes
+         <d.l.tDecontes@free.fr>
+
+                                  5/16
+                                  ----
+lib/readline/rlmbutil.h
+       - WCWIDTH: wrapper for wcwidth that returns 0 for Unicode combining
+         characters on systems where wcwidth is broken (e.g., Mac OS X).
+
+lib/readline/{complete,display,mbutil}.c
+       - use WCWIDTH instead of wcwidth
+
+                                  5/17
+                                  ----
+lib/readline/display.c
+       - update_line: after computing ofd and nfd, see whether the next
+         character in ofd is a zero-width combining character.  If it is,
+         back ofd and nfd up one, so the base characters no longer compare
+         as equivalent.  Fixes problem reported by Keith Winstein
+         <keithw@mit.edu>
+
+lib/readline/nls.c
+       - _rl_utf8locale: new flag variable, set to non-zero if the current
+         locale is UTF-8
+       - utf8locale(): new function, returns 1 if the passed lspec (or the
+         current locale) indicates that the locale is UTF-8.  Called from
+         _rl_init_eightbit
+
+lib/readline/rlprivate.h
+       - extern declaration for _rl_utf8locale
+
+locale.c
+       - locale_utf8locale: new flag variable, set to non-zero if the current
+         locale is UTF-8 (currently unused)
+       - locale_isutf8(): new function, returns 1 if the passed lspec (or the
+         current locale) indicates that the locale is UTF-8.  Should be called
+         whenever the locale or LC_CTYPE value is modified
+
+aclocal.m4
+       - BASH_WCWIDTH_BROKEN: new test for whether or not wcwidth returns
+         zero-width characters like unicode combining characters as having
+         display length 1; define WCWIDTH_BROKEN in this case
+
+config.h.in
+       - WCWIDTH_BROKEN: new define
+
+lib/readline/rlmbutil.h
+       - change WCWIDTH macro to use _rl_utf8locale and the full range of
+         Unicode combining characters (U+0300-U+036F)
+
+                                  5/19
+                                  ----
+lib/readline/rlprivate.h
+       - _rl_search_context: new member, prevc, will hold character read
+         prior to lastc
+
+lib/readline/isearch.c
+       - _rl_isearch_dispatch: if the character causes us to index into
+         another keymap, save that character in cxt->prevc
+       - _rl_isearch_dispatch: if we index into another keymap, but don't
+         find a function that's special to i-search, and the character that
+         caused us to index into that keymap would have terminated the
+         search, push back cxt->prevc and cxt->lastc to make it appear as
+         if `prevc' terminated the search, and execute lastc as a command.
+         We have to push prevc back so we index into the same keymap before
+         we read lastc.  Fixes bug report from Davor Cubranic
+         <cubranic@stat.ubc.ca>
+
+                                  5/20
+                                  ----
+expr.c
+       - expr_bind_variable: pay attention to the return value from
+         bind_variable and check whether or not we should error out due to
+         a readonly or noassign variable.  Fixes bug reported by Eric
+         Blake <eblake@redhat.com>
+
+                                  5/26
+                                  ----
+
+lib/readline/search.c
+       - include histlib.h for ANCHORED_SEARCH defines
+       - rl_history_search_flags: new variable, holds ANCHORED_SEARCH flag for
+         the duration of a history search
+       - rl_history_search_reinit: takes a new flags variable, defines whether
+         or not the search is anchored; assigned to rl_history_search_flags
+       - rl_history_serarch_reinit: if ANCHORED_SEARCH flag passed, add ^ to
+         beginning of search string; otherwise search string is unmodified
+       - rl_history_search_internal: set rl_point appropriately based on
+         whether or not rl_history_search_flags includes ANCHORED_SEARCH
+       - rl_history_substr_search_forward: new function, for non-anchored
+         substring search forward through history for string of characters
+         preceding rl_point
+       - rl_history_substr_search_backward: new function, for non-anchored
+         substring search backward through history for string of characters
+         preceding rl_point.  Original code from Niraj Kulkarni
+         <kulkarniniraj14@gmail.com>
+
+lib/readline/readline.h
+       - extern declarations for rl_history_substr_search_{for,back}ward
+
+lib/readline/funmap.c
+       - history-substring-search-forward: new bindable command, invokes
+         rl_history_substr_search_forward
+       - history-substring-search-backward: new bindable command, invokes
+         rl_history_substr_search_backward
+
+lib/readline/doc/{rluser.texi,readline.3}
+       - document history-substring-search-forward and
+         history-substring-search-backward
+
+                                  5/27
+                                  ----
+{nojobs,jobs}.c
+       - add support for DONT_REPORT_SIGTERM so that the shell doesn't print
+         a message when a job exits due to SIGTERM since that's the default
+         signal sent by the kill builtin.  Suggested by Marc Herbert
+         <mark.herbert@gmail.com>
+
+config-top.h
+       - DONT_REPORT_SIGTERM: new user-modifiable setting.  Commented out
+         by default
+
+                                  5/28
+                                  ----
+lib/readline/bind.c
+       - _rl_skip_to_delim: skip to a closing double quote or other delimiter,
+         allowing backslash to quote any character, including the delimiter
+       - rl_parse_and_bind: call _rl_skip_to_delim instead of using inline
+         code
+       - rl_parse_and_bind: allow quoted strings as the values of string
+         variables.  Variable values without double quotes have trailing
+         whitespace removed (which still allows embedded whitespace, for
+         better or worse).  Fixes problem with string variables not matching
+         in `set' command if values happen to have trailing spaces or tabs
+         (debian bash bug #602762), but introduces slight incompatibility.
+
+                                  5/29
+                                  ----
+doc/{bash.1,bashref.texi}
+       - clarify unset description to specify that without options, a
+         variable, then a shell function if there is no variable by that
+         name, is unset.  Fixes discrepancy reported by Mu Qiao
+         <qiaomuf@gentoo.org>
+
+                                  6/4
+                                  ----
+doc/{bash.1,bashref.texi}
+       - clarify description of LINES and COLUMNS (and checkwinsize shopt
+         option) to make it clear that only interactive shells set a
+         handler for SIGWINCH and update LINES and COLUMNS.  Original
+         report submitted by Jonathan Nieder <jrnieder@gmail.com>
+
+arrayfunc.c
+       - expand_compound_array_assignment: defer expansion of words between
+         parens when performing compound assignmnt to an associative array
+         variable
+       - assign_compound_array_list: perform the same expansions when doing
+         a compound array assignment to an associative array variable as
+         when doing a straight array index assignment.  The idea is that
+               foo=( [ind1]=bar [ind2]=quux)
+         is the same as
+               foo[ind1]=bar ; foo[ind2]=quux
+
+         This fixes problems with double-expansion and quote removal being
+         performed on the array indices
+
+                                  6/13
+                                  ----
+doc/{bash.1,bashref.texi}
+       - Add a little text to make it clear that the locale determines how
+         range expressions in glob patterns are handled.
+
+
+                                  6/21
+                                  ----
+builtins/read.def
+       - display a message and return error status if -a is used with an
+         existing associative array.  Fixes bug reported by Curtis Doty
+         <curtis@greenkey.net>
+
+                                  6/24
+                                  ----
+{jobs,nojobs}.c
+       - non-interactive shells now react to the setting of checkwinsize
+         and set LINES and COLUMNS after a foreground job exits.  From a
+         suggestion by Leslie Rhorer <lrhorer@satx.rr.com>
+
+doc/{bash.1,bashref.texi}
+       - checkwinsize: remove language saying that only interactive shells
+         check the window size after each command
+
+lib/readline/histfile.c
+       - history_backupfile: new file, creates a backup history file name
+         given a filename (appending `-')
+       - history_do_write: when overwriting the history file, back it up
+         before writing.  Restore backup file on a write error.  Suggested
+         by chkno@chkno.net
+
+bashline.c
+       - find_cmd_name: two new arguments, return the start and end of the
+         actual text string used to find the command name, without taking
+         whitespace into account
+       - attempt_shell_completion: small changes to make sure that completion
+         attempted at the beginning of a non-empty line does not find a
+         programmable completion, even if the command name starts at point
+       - attempt_shell_completion: small change to make sure that completion
+         does not find a progcomp when in whitespace before the command
+         name
+       - attempt_shell_completion: small change to make sure that completion
+         does not find a progcomp when point is at the first character of a
+         command name, even when there is leading whitespace (similar to
+         above).  Fixes problems noted by Ville Skytta <ville.skytta@iki.fi>
+
+subst.c
+       - brace_expand_word_list: since the individual strings in the strvec
+         returned by brace_expand are already allocated, don't copy them to
+         newly-allocated memory when building the WORD_LIST, just use them
+         intact
+
+locale.c
+       - locale_mb_cur_max: cache value of MB_CUR_MAX when we set or change
+         the locale to avoid a function call every time we need to read it
+
+shell.h
+       - new struct to save shell_input_line and associated variables:
+         shell_input_line_state_t
+       - add members of sh_parser_state_t to save and restore token and the
+         size of the token buffer
+
+parse.y
+       - {save,restore}_input_line_state: new functions to save and restore
+         shell_input_line and associated variables
+       - {save,restore}_parser_state: add code to save and restore the token
+         and token buffer size
+       - xparse_dolparen: call save_ and restore_input_line_state to avoid
+         problems with overwriting shell_input_line when we recursively
+         call the parser to parse a command substitution.  Fixes bug
+         reported by Rui Santos <rsantos@grupopie.com>
+
+include/shmbutil.h
+       - use locale_mb_cur_max instead of MB_CUR_MAX in ADVANCE_CHAR and
+         similar macros
+
+lib/glob/smatch.c
+       - rangecmp,rangecmp_wc: change to take an additional argument, which
+         forces the use of strcoll/wscoll when non-zero.  If it's 0, a new
+         variable `glob_asciirange' controls whether or not we use strcoll/
+         wscoll.  If glob_asciirange is non-zero, we use straight
+         C-locale-like ordering. Suggested by  Aharon Robbins
+         <arnold@skeeve.com>
+
+                                  6/30
+                                  ----
+execute_cmd.c
+       - execute_pipeline: make sure the lastpipe code is protected by
+         #ifdef JOB_CONTROL.  Fixes problem reported by Thomas Cort
+         <tcort@minix3.org>
+
+                                   7/2
+                                   ---
+lib/readline/complete.c
+       - EXPERIMENTAL: remove setting of _rl_interrupt_immediately around
+         completion functions that touch the file system.  Idea from Jan
+         Kratochvil <jan.ktratochvil@redhat.com> and the GDB development
+         team
+
+lib/readline/signals.c
+       - rl_signal_handler: if we're in callback mode, don't interrupt
+         immediately on a SIGWINCH
+
+                                   7/3
+                                   ---
+bashline.c
+       - set_directory_hook: and its siblings are a new set of functions to
+         set, save, and restore the appropriate directory completion hook
+       - change callers to use {set,save,restore}_directory_hook instead of
+         manipulating rl_directory_rewrite_hook directly
+       - dircomplete_expand: new variable, defaults to 0, if non-zero causes
+         directory names to be word-expanded during word and filename
+         completion
+       - change {set,save,restore}_directory_hook to look at dircomplete_expand
+         and change rl_directory_completion_hook or rl_directory_rewrite_hook
+         appropriately
+
+bashline.h
+       - extern declaration for set_directory_hook so shopt code can use it
+
+                                   7/6
+                                   ---
+builtins/shopt.def
+       - globasciiranges: new settable shopt option, makes glob ranges act
+         as if in the C locale (so b no longer comes between A and B).
+         Suggested by Aharon Robbins <arnold@skeeve.com>
+
+                                   7/7
+                                   ---
+doc/{bash.1,bashref.texi}
+       - document new `globasciiranges' shopt option
+
+                                   7/8
+                                   ---
+builtins/shopt.def
+       - direxpand: new settable option, makes filename completion expand
+         variables in directory names like bash-4.1 did.
+       - shopt_set_complete_direxpand: new function, does the work for the
+         above by calling set_directory_hook
+
+doc/{bash.1,bashref.texi}
+       - document new `direxpand' shopt option
+
+                                  7/15
+                                  ----
+lib/readline/isearch.c
+       - _rl_isearch_dispatch: when adding character to search string, use
+         cxt->lastc (which we use in the switch statement) instead of c,
+         since lastc can be modified earlier in the function
+
+                                  7/18
+                                  ----
+lib/readline/rlprivate.h
+       - _rl_search_context: add another member to save previous value of
+         (multibyte) lastc: pmb is to mb as prevc is to lastc
+
+lib/readline/isearch.c:
+       - _rl_isearch_dispatch: if a key sequence indexes into a new keymap,
+         but doesn't find any bound function (k[ind].function == 0) or is
+         bound to self-insert (k[ind].function == rl_insert), back up and
+         insert the previous character (the one that caused the index into a
+         new keymap) and arrange things so the current character is the next
+         one read, so both of them end up in the search string.  Fixes bug
+         reported by Clark Wang <dearvoid@gmail.com>
+       - _rl_isearch_dispatch: a couple of efficiency improvements when adding
+         characters to the isearch string
+
+                                  7/24
+                                  ----
+lib/readline/isearch.c
+       - _rl_isearch_dispatch: save and restore cxt->mb and cxt->pmb
+         appropriately when in a multibyte locale
+
+doc/{bash.1,bashref.texi}
+       - correct description of {x}>file (and other redirection operators
+         that allocate a file descriptor) to note the the fd range is
+         greater than or equal to 10.  Fixes problem reported by
+         Christian Ullrich 
+
+lib/readline/signals.c
+       - rl_signal_handler: don't interrupt immediately if in callback mode
+
+lib/readline/callback.c
+       - rl_callback_read_char: install signal handlers only when readline
+         has control in callback mode, so readline's signal handlers aren't
+         called when the application is active (e.g., between the calls to
+         rl_callback_handler_install and rl_callback_read_char).  If the
+         readline signal handlers only set a flag, which the application
+         doesn't know about, the signals will effectively be ignored until
+         the next time the application calls into the readline callback
+         interface.  Fixes problem of calling unsafe functions from signal
+         handlers when in callback mode reported by Jan Kratochvil
+         <jan.kratochvil@redhat.com>
+
+execute_cmd.c
+       - fix_assignment_words: when in Posix mode, the `command' builtin
+         doesn't change whether or not the command name it protects is an
+         assignment builtin.  One or more instances of `command'
+         preceding `export', for instance, doesn't make `export' treat its
+         assignment statement arguments differently.  Posix interpretation
+         #351
+
+doc/{bash.1,bashref.texi}
+       - document new Posix-mode behavior of `command' when preceding builtins
+         that take assignment statements as arguments
+
+builtins/printf.def
+       - printstr: if fieldwidth or precision are < 0 or > INT_MAX when
+         supplied explicitly (since we take care of the `-' separately),
+         clamp at INT_MAX like when using getint().  Fixes issue reported
+         by Ralph Coredroy <ralph@inputplus.co.uk>
+
+                                  7/25
+                                  ----
+lib/readline/chardefs.h
+       - isxdigit: don't define if compiling with c++; declared as a c++
+         template function.  Fixes bug reported by Miroslav Lichvar
+         <mlichvar@redhat.com>
+
+builtins/printf.def
+       - getint: if garglist == 0, return whatever getintmax returns (0).
+         Fixes bug reported  by Ralph Coredroy <ralph@inputplus.co.uk>
+
+                                  7/28
+                                  ----
+doc/{bash.1,bashref.texi}
+       - minor changes to the descriptions of the cd and pushd builtins
+
+lib/sh/zread.c
+       - zsyncfd: change variable holding return value from lseek to
+         off_t.  Bug report and fix from Gregory Margo <gmargo@pacbell.net>
+
+                                   8/1
+                                   ---
+expr.c
+       - don't check for division by 0 when in a context where no evaluation
+         is taking place.  Fixes bug reported by dnade.ext@orange-ftgroup.com
+
+                                   8/6
+                                   ---
+execute_cmd.c
+       - execute_command_internal: the parent branch of the subshell code
+         (where the child calls execute_in_subshell) should not close all
+         open FIFOs with unlink_fifo_list if it's part of a shell function
+         that's still executing.  Fixes bug reported by Maarten Billemont
+         <lhunath@lyndir.com>
+
+                                   8/9
+                                   ---
+builtins/common.c
+       - get_exitstat: return EX_BADUSAGE (2) on a non-numeric argument
+
+builtins/return.def
+       - return_builtin: just call get_exitstat to get the return status,
+         let it handle proper parsing and handling of arguments.  Fixes
+         issue most recently raised by Linda Walsh <bash@tlinx.org>.
+         Reverses change from 9/11/2008 (see above)
+
+                                  8/16
+                                  ----
+doc/{bash.1,bashref.texi}
+       - clean up `set -e' language to make it clearer that any failure of
+         a compound command will cause the shell to exit, not just subshells
+         and brace commands
+
+                                  8/17
+                                  ----
+configure.in
+       - make the various XXX_FOR_BUILD variables `precious' to autoconf to
+         avoid stale data
+       - change how CC_FOR_BUILD is initialized when cross-compiling and not,
+         but do not change behavior
+       - initialize CFLAGS_FOR_BUILD to -g when cross-compiling
+       - initialize LIBS_FOR_BUILD to $(LIBS) when not cross-compiling, empty
+         when cross-compiling
+       - create AUTO_CFLAGS variable to hold basic CFLAGS defaults; used when
+         CFLAGS not inherited from environment (like effect of old
+         auto_cflags variable)
+       - substitute LIBS_FOR_BUILD into output Makefiles
+         [changes inspired by bug report from Nathan Phillip Brink
+         <ohnobinki@ohnopublishing.net> -- gentoo bug 378941]
+
+builtins/Makefile.in   
+       - substitute LIBS_FOR_BUILD from configure, not strictly initialized
+         to $(LIBS)
+
+                                  8/27
+                                  ----
+doc/{bash.1,bashref.texi}
+       - minor changes to the here string description to clarify the
+         expansions performed on the word
+
+support/shobj-conf
+       - handle compilation on Lion (Mac OS X 10.7/darwin11) with changes
+         to darwin stanzas.  Fixes readline bug reported by Vincent
+         Sheffer <vince.sheffer@apisphere.com>
+
+lib/sh/strtrans.c
+       - ansic_wshouldquote: check a string with multi-byte characters for
+         characters that needs to be backslash-octal escaped for $'...'
+       - ansic_shouldquote: if is_basic fails for one character, let
+         ansic_wshouldquote examine the rest of the string and return what
+         it returns.  From a patch sent by Roman Rakus <rrakus@redhat.com>
+
+                                  8/30
+                                  ----
+lib/sh/strtrans.c
+       - ansic_quote: changes to quote (or not) multibyte characters.  New
+         code converts them to wide characters and uses iswprint to check
+         valid wide chars.  From a patch sent by Roman Rakus
+         <rrakus@redhat.com>
+
+                                   9/7
+                                   ---
+lib/sh/shquote.c
+       - sh_backslash_quote: change to be table-driven so we can use a
+         different table if we want to
+       - sh_backslash_quote: takes a second char table[256] argument;
+
+externs.h
+       - sh_backslash_quote: add second argument to function prototype
+
+bashline.c,braces.c,parse.y,builtins/printf.def
+       - change callers of sh_backslash_quote to add second argument
+
+bashline.c
+       - filename_bstab: table of characters to pass to sh_backslash_quote;
+         characters with value 1 will be backslash-quoted
+       - set_filename_bstab: turn on characters in filename backslash-quote
+         table according to passed string argument
+       - call set_filename_bstab every time rl_filename_quote_characters is
+         assigned a value
+       - bash_quote_filename: call sh_backslash_quote with filename_bstab
+         as second argument.  This allows other characters in filenames to
+         be quoted without quoting, for instance, a dollar sign in a shell
+         variable reference
+
+                                   9/8
+                                   ---
+bashline.c
+       - complete_fullquote: new variable, controls table passed to
+         sh_backslash_quote.  If non-zero (the default), the standard set
+         of shell metacharacters -- as in bash versions up to and including
+         bash-4.2 -- gets backslash-quoted by the completion code.  If zero,
+         sh_backslash_quote gets the table with the characters in the
+         variable reference removed, which means they are removed from the
+         set of characters to be quoted in filenames
+
+                                  9/10
+                                  ----
+bashline.c
+       - bash_filename_stat_hook: new function, designed to expand variable
+         references in filenames before readline passes them to stat(2)
+         to determine whether or not they are a directory
+
+                                  9/15
+                                  ----
+builtins/declare.def
+       - if assign_array_element fails due to a bad (or empty) subscript, mark
+         it as an assignment error and don't attempt any further processing
+         of that declaration.  Fixes segfault bug reported by Diego Augusto
+         Molina <diegoaugustomolina@gmail.com>
+
+                                  9/19
+                                  ----
+expr.c
+       - exppower: replace the simple exponentiation algorithm with an
+         implementation of exponentiation by squaring.  Inspired by report
+         from Nicolas ARGYROU <nargy@yahoo.com>
+
+bashline.c
+       - bash_quote_filename: check for rtext being non-null before
+         dereferencing it
+       - set_saved_history: operate_and_get_next assumes that the previous
+         line was added to the history, even when the history is stifled and
+         at the max number of entries.  If it wasn't, make sure the history
+         number is incremented properly.  Partial fix for bug reported by
+         gregrwm <backuppc-users@whitleymott.net>
+
+doc/{bash.1,bashref.texi},lib/readline/doc/{hsuser,rluser}.texi
+       - minor editorial changes inspired by suggestions from
+         Roger Zauner <rogerx.oss@gmail.com>
+
+                                  9/20
+                                  ----
+lib/intl/localealias.c
+       - read_alias_file: close resource leak (fp) when returning on error
+
+                                  9/22
+                                  ----
+execute_command.c
+       - execute_intern_function: implement Posix interpretation 383 by making
+         it an error to define a function with the same name as a special
+         builtin when in Posix mode.
+         http://austingroupbugs.net/view.php?id=383#c692
+
+                                  9/25
+                                  ----
+doc/{bash.1,bashref.texi}
+       - formatting and some content changes from Benno Schulenberg
+         <bensberg@justemail.net>
+       - document new posix-mode behavior from interp 383 change of 9/22
+
+                                  9/30
+                                  ----
+execute_cmd.c
+       - shell_execve: add strerror to error message about executable file
+         that shell can't execute as a shell script.  From suggestion by
+         daysleeper <daysleeper@centrum.cz>
+
+                                  10/1
+                                  ----
+bashhist.c
+       - maybe_add_history: act as if literal_history is set when parser_state
+         includes PST_HEREDOC, so we save the bodies of here-documents just
+         as they were entered.  Fixes bug reported by Jonathan Wakely
+         <bugs@kayari.org>
+       - bash_add_history: make sure that the second and subsequent lines of
+         a here document don't have extra newlines or other delimiting
+         chars added, since they have the trailing newline preserved, when
+         `lithist' is set and history_delimiting_chars isn't called
+
+execute_cmd.c
+       - execute_command_internal: avoid fd exhaustion caused by using
+         process substitution in loops inside shell functions by using
+         copy_fifo_list and close_new_fifos ().  Fixes debian bash bug
+         642504
+
+lib/readline/complete.c
+       - new variable, rl_filename_stat_hook, used by append_to_match.  If
+         filename completion is desired, and rl_filename_stat_hook points
+         to a function, call that function to expand the filename in an
+         application-specific way before calling stat.
+
+bashline.c
+       - bash_default_completion: if variable completion returns a single
+         match, use bash_filename_stat_hook and file_isdir to determine
+         whether or not the variable name expands to a directory.  If it
+         does, set the filename_append_character to `/'.  This is not
+         perfect, so we will see how it works out.  Adds functionality
+         requested by Peter Toft <pto@linuxbog.dk> and Patrick Pfeifer
+         <patrick@pfeifer.de>
+       - rl_filename_stat_hook: assigned bash_filename_stat_hook, so things
+         like $HOME/Downloads (after completion) have a slash appended.
+         In general, this causes the stat hook to be called whenever
+         filename completion is appended.  Adds functionality requested by
+         Patrick Pfeifer <patrick@pfeifer.de>
+
+lib/readline/readline.h
+       - new extern declaration for rl_filename_stat_hook
+
+lib/readline/doc/rltech.texi
+       - rl_directory_rewrite_hook: now documented
+       - rl_filename_stat_hook: document
+
+pcomplete.c
+       - gen_action_completions: in the CA_DIRECTORY case, turn off
+         rl_filename_completion_desired if it was off before we called
+         rl_filename_completion_function and we didn't get any matches.
+         Having it on causes readline to quote the matches as if they
+         were filenames.  Adds functionality requested by many,
+         including Clark Wang <dearvoid@gmail.com>
+
+assoc.[ch]
+       - assoc_replace: new function, takes the same arguments as
+         assoc_insert, but returns the old data instead of freeing it
+       - assoc_insert: if the object returned by hash_insert doesn't have
+         the same value for its key as the key passed as an argument, we
+         are overwriting an existing value.  In this case, we can free the
+         key.  Fixes bug reported by David Parks <davidparks21@yahoo.com>
+
+                                  10/5
+                                  ----
+print_cmd.c
+       - indirection_level_string: small change to only re-enable `x'
+         option after calling decode_prompt_string if it was on before.  In
+         normal mode, it will be, but John Reiser <jreiser@bitwagon.com>
+         has a novel use for that code in conjunction with a pre-loaded
+         shared library that traces system call usage in shell scripts
+
+                                  10/10
+                                  -----
+Makefile.in
+       - Fix from Mike Frysinger <vapier@gentoo.org> to avoid trying to
+         build y.tab.c and y.tab.h with two separate runs of yacc if
+         parse.y changes.  Problem with parallel makes
+       - Fix from Mike Frysinger <vapier@gentoo.org> to avoid subdirectory
+         builds each trying to make version.h (and all its dependencies)
+
+lib/sh/Makefile.in
+       - remove some dependencies on version.h where it doesn't make sense
+
+variables.c
+       - initialize_shell_variables: while reading the environment, a shell
+         running in posix mode now checks for SHELLOPTS being readonly (it
+         gets set early on in main()) before trying to assign to it.  It
+         saves an error message and the variable gets parsed as it should.
+         Fixes bug reported by Len Giambrone <Len.Giambrone@intersystems.com>
+
+                                  10/14
+                                  -----
+doc/{bash.1,bashref.texi}
+       - add to the "duplicating file descriptors" description that >&word
+         doesn't redirect stdout and stderr if word expands to `-'
+       - add to the "appending standard output and standard error"
+         description a note that >&word, where word is a number or `-',
+         causes other redirection operators to apply for sh and Posix
+         compatibility reasons.  Suggested by Greg Wooledge
+         <wooledg@eeg.ccf.org>
+
+                                  10/15
+                                  -----
+pcomplete.c
+       - change pcomp_filename_completion_function to only run the filename
+         dequoting function in the cases (as best as it can figure) where
+         readline won't do it via rl_filename_completion_function.  Based
+         on reports from <lolilolicon@gmail.com>
+
+                                  10/19
+                                  -----
+bashline.c
+       - attempt_shell_completion: add call to set_directory_hook() to make
+         sure the rewrite functions are correct.  It's cheap and doesn't
+         hurt
+       - command_word_completion_function: if completing a command name that
+         starts with `.' or `..', temporarily suppress the effects of the
+         `direxpand' option and restore the correct value after calling
+         rl_filename_completion_function.  If it's enabled, the directory
+         name will be rewritten and no longer match `./' or `../'.  Fixes
+         problem reported by Michael Kalisz <michael@kalisz.homelinux.net>
+
+                                  10/22
+                                  -----
+builtins/history.def
+       - push_history: make sure remember_on_history is enabled before we
+         try to delete the last history entry -- the `history -s' command
+         might not have been saved.  Fixes bug reported by
+         lester@vmw-les.eng.vmware.com
+
+lib/readline/complete.c
+       - rl_callback_read_char: add calls to a macro CALLBACK_READ_RETURN
+         instead of straight return; add same call at end of function.
+         Placeholder for future work in deinstalling signal handlers when
+         readline is not active
+
+                                  10/25
+                                  -----
+expr.c
+       - exp2: catch arithmetic overflow when val1 == INTMAX_MIN and val2 == -1
+         for DIV and MOD and avoid SIGFPE.  Bug report and pointer to fix
+         from Jaak Ristioja <jaak.ristioja@cyber.ee>
+       - expassign: same changes for arithmetic overflow for DIV and MOD
+
+                                  10/28
+                                  -----
+subst.c
+       - parameter_brace_expand: allow pattern substitution when there is an
+         expansion of the form ${var/} as a no-op: replacing nothing with
+         nothing
+       - parameter_brace_patsub: don't need to check for PATSUB being NULL;
+         it never is
+
+flags.c
+       - if STRICT_POSIX is defined, initialize history_expansion to 0, since
+         history expansion (and its treatment of ! within double quotes) is
+         not a conforming posix environment.  From austin-group issue 500
+
+lib/readline/histexpand.c
+       - history_expand: when processing a string within double quotes
+         (DQUOTE == 1), make the closing double quote inhibit history
+         expansion, as if the word were outside double quotes.  In effect,
+         we assume that the double quote is followed by a character in
+         history_no_expand_chars.  tcsh and csh seem to do this.  This
+         answers a persistent complaint about history expansion
+
+                                  10/29
+                                  -----
+make_cmd.c
+       - make_arith_for_command: use skip_to_delim to find the next `;'
+         when breaking the string between the double parens into three
+         separate components instead of a simple character loop.  Fixes
+         bug reported by Dan Douglas <ormaaj@gmail.com>
+
+                                  11/2
+                                  ----
+Makefile.in
+       - make libbuiltins.a depend on builtext.h to serialize its creation
+         and avoid conflict between multiple invocations of mkbuiltins.
+         Fix from Mike Frysinger <vapier@gentoo.org>
+
+                                  11/5
+                                  ----
+findcmd.c
+       - user_command_matches: if stat(".", ...) returns -1, set st_dev
+         and st_ino fields in dotinfo to 0 to avoid same_file matches
+       - find_user_command_in_path: check stat(2) return the same way
+
+lib/glob/glob.c
+       - glob_vector: don't call strlen(pat) without checking pat == 0
+       - glob_dir_to_array: make sure to free `result' and all allocated
+         members before returning error due to malloc failure
+       - glob_vector: make sure to free `nextname' and `npat' on errors
+         (mostly when setting lose = 1)
+       - glob_vector: if flags & GX_MATCHDIRS but not GX_ALLDIRS, make
+         sure we free `subdir'
+       - glob_filename: when expanding ** (GX_ALLDIRS), make sure we
+         free temp_results (return value from glob_vector)
+
+lib/glob/xmbsrtowcs.c
+       - xdupmbstowcs: fix call to realloc to use sizeof (char *) instead
+         of sizeof (char **) when assigning idxtmp
+
+execute_cmd.c
+       - print_index_and_element: return 0 right away if L == 0
+       - is_dirname: fix memory leak by freeing `temp'
+       - time_command: don't try to deref NULL `command' when assigning
+         to `posix_time'
+       - shell_execve: null-terminate `sample' after READ_SAMPLE_BUF so it's
+         terminated for functions that expect that
+
+builtins/read.def
+       - read_builtin: don't call bind_read_variable with a potentially-null
+         string
+
+pcomplete.c
+       - gen_command_matches: don't call dispose_word_desc with a NULL arg
+       - gen_compspec_completions: fix memory leak by freeing `ret' before
+         calling gen_action_completions (tcs, ...).  happens when
+         performing directory completion as default and no completions
+         have been generated
+       - gen_progcomp_completions: make sure to set foundp to 0 whenever
+         returning NULL
+       - it_init_aliases: fix memory leak by freeing alias_list before
+         returning
+
+bashline.c
+       - command_word_completion_function: don't call restore_tilde with a
+         NULL directory_part argument
+       - bash_directory_expansion: bugfix: don't throw away results of
+         rl_directory_rewrite_hook if it's set and returns non-zero
+       - bind_keyseq_to_unix_command: free `kseq' before returning error
+
+arrayfunc.c
+       - assign_array_element_internal: make sure `akey' is freed if non-null
+         before returning error
+       - assign_compound_array_list: free `akey' before returning error
+       - array_value_internal: free `akey' before returning error
+       - unbind_array_element: free `akey' before returning error
+
+subst.c
+       - array_length_reference: free `akey' before returning error in case
+         of expand_assignment_string_to_string error
+       - array_length_reference: free `akey' after call to assoc_reference
+       - skip_to_delim: if skipping process and command substitution, free
+         return value from extract_process_subst
+       - parameter_brace_substring: free `val' (vtype == VT_VARIABLE) before
+         returning if verify_substring_values fails
+       - parameter_brace_expand: remove two duplicate lines that allocate
+         ret in parameter_brace_substring case
+       - parameter_brace_expand: convert `free (name); name = xmalloc (...)'
+         to use `xrealloc (name, ...)'
+       - parameter_brace_expand: free `name' before returning when handling
+         ${!PREFIX*} expansion
+       - split_at_delims: fix memory leak by freeing `d2' before returning
+
+redir.c
+       - redirection_error: free `filename' if the redirection operator is
+         REDIR_VARASSIGN by assigning allocname
+
+eval.c
+       - send_pwd_to_eterm: fix memory leak by freeing value returned by
+         get_working_directory()
+
+builtins/cd.def
+       - change_to_directory: fix memory leak by freeing return value from
+         resetpwd()
+       - cd_builtin: fix memory leak by freeing value returned by dirspell()
+       - cd_builtin: fix memory leak by freeing `directory' if appropriate
+         before overwriting with return value from resetpwd()
+
+builtins/type.def
+       - describe_command: free `full_path' before overwriting it with return
+         value from sh_makepath
+
+builtins/complete.def
+       - compgen_builtin: fix memory leak by calling strlist_dispose (sl)
+         before overwriting sl with return value from completions_to_stringlist
+
+builtins/hash.def
+       - list_hashed_filename_targets: fix memory leak by freeing `target'
+
+make_cmd.c
+       - make_arith_for_command: free `init', `test', and `step' before
+         returning error on parse error
+
+jobs.c
+       - initialize_job_control: don't call move_to_high_fd if shell_tty == -1
+
+general.c
+       - check_dev_tty: don't call close with an fd < 0
+       - legal_number: deal with NULL `string' argument, return invalid
+
+lib/sh/fmtulong.c
+       - fmtulong: if the `base' argument is invalid, make sure we index
+         buf by `len-1' at maximum
+
+print_cmd.c
+       - print_deferred_heredocs: don't try to dereference a NULL `cstring'
+       - cprintf: make sure to call va_end (args)
+
+variables.c
+       - push_dollar_vars: fix call to xrealloc to use sizeof (WORD_LIST *)
+         instead of sizeof (WORD_LIST **)
+
+lib/sh/zmapfd.c
+       - zmapfd: if read returns error, free result and return -1 immediately
+         instead of trying to reallocate it
+
+                                  11/6
+                                  ----
+execute_cmd.c
+       - cpl_reap: rewrote to avoid using pointer after freeing it; now builds
+         new coproc list on the fly while traversing the old one and sets the
+         right values for coproc_list when done
+
+                                  11/12
+                                  -----
+builtins/set.def
+       - if neither -f nor -v supplied, don't allow a readonly function to
+         be implicitly unset.  Fixes bug reported by Jens Schmidt
+         <jens.schmidt35@arcor.de>
+
+lib/readline/callback.c
+       - change CALLBACK_READ_RETURN to clear signal handlers before returning
+         from rl_callback_read_char so readline's signal handlers aren't
+         installed when readline doesn't have control.  Idea from Jan
+         Kratochvil <jan.ktratochvil@redhat.com> and the GDB development
+         team
+
+pcomplete.h
+       - COPT_NOQUOTE: new complete/compgen option value
+
+builtins/complete.def
+       - noquote: new complete/compgen option; will be used to disable
+         filename completion quoting
+
+pcomplete.c
+       - pcomp_set_readline_variables: pay attention to COPT_NOQUOTE; turns
+         of rl_filename_quoting_desired if set; turns it on if unset (value
+         is inverted, since default is on)
+
+doc/bash.1,lib/readline/doc/rluser.texi
+       - document new -o noquote option to complete/compgen/compopt
+
+pathexp.c
+       - quote_string_for_globbing: if QGLOB_REGEXP, make sure characters
+         between brackets in an ERE bracket expression are not inappropriately
+         quoted with backslashes.  This is a pretty substantial change,
+         should be stressed when opening bash up for alpha and beta tests.
+         Fixes bug pointed out by Stephane Chazleas
+         <stephane_chazelas@yahoo.fr>
+
+doc/{bash.1,bashref.texi}
+       - document that regexp matches can be inconsistent when quoting
+         characters in bracket expressions, since usual quoting characters
+         lose their meaning within brackets
+       - note that regular expression matching when the pattern is stored
+         in a shell variable which is quoted for expansion causes string
+         matching
+
+redir.h
+       - RX_SAVEFD: new flag value; notes that a redirection denotes an
+         fd used to save another even if it's not >= SHELL_FD_BASE
+
+redir.c
+       - do_redirection_internal: when deciding whether or not to reset the
+         close-on-exec flag on a restored file descriptor, trust the value
+         of redirect->flags & RX_SAVCLEXEC even if the fd is < SHELL_FD_BASE
+         if the RX_SAVEFD flag is set
+       - add_undo_redirect: set the RX_SAVEFD flag if the file descriptor
+         limit is such that the shell can't duplicate to a file descriptor
+         >= 10.  Fixes a limitation that tripped a coreutils test reported
+         by Paul Eggert <eggert@cs.ucla.edu>
+
+                                  11/19
+                                  -----
+doc/{bash.1,bashref.texi},lib/readline/doc/hsuser.texi
+       - make it clear that bash runs HISTFILESIZE=$HISTSIZE after reading
+         the startup files
+       - make it clear that bash runs HISTSIZE=500 after reading the
+         startup files
+       - make it clear that setting HISTSIZE=0 causes commands to not be
+         saved in the history list
+       - make it clear that setting HISTFILESIZE=0 causes the history file
+         to be truncated to zero size
+
+variables.c
+       - sv_histsize: change so setting HISTSIZE to a value less than 0
+         causes the history to be `unstifled'
+       - sv_histsize: change so setting HISTFILESIZE to a value less than 0
+         results in no file truncation
+       - make it clear that numeric values less than 0 for HISTFILESIZE or
+         HISTSIZE inhibit the usual functions
+
+                                  11/23
+                                  -----
+parse.y
+       - save_input_line_state: add missing `return ls' at the end, since the
+         function is supposed to return its argument.  Pointed out by
+         Andreas Schwab <schwab@linux-m68k.org>
+
+builtins/read.def
+       - skip over NUL bytes in input, as most modern shells seem to.  Bug
+         report by Matthew Story <matt@tablethotels.com>
+
+lib/readline/vi_mode.c
+       - rl_vi_replace: set _rl_vi_last_key_before_insert to invoking key
+
+                                  11/25
+                                  -----
+builtins/read.def
+       - read_builtin: if xrealloc returns same pointer as first argument,
+         don't bother with the remove_unwind_protect/add_unwind_protect pair
+       - read_builtin: set a flag (`reading') around calls to zread/zreadc
+         and readline()
+       - sigalrm: change to set flag (`sigalrm_seen') and only longjmp if
+         currently in read(2) (reading != 0)
+       - CHECK_ALRM: new macro, checks sigalrm_seen and longjmps if non-zero,
+         behavior of old SIGALRM catching function
+       - read_builtin: call CHECK_ALRM in appropriate places while reading
+         line of input.  Fixes bug reported by Pierre Gaston
+         <pierre.gaston@gmail.com>
+
+lib/readline/vi_mode.c
+       - rl_vi_replace: initialize characters before printing characters in
+         vi_replace_keymap to their default values in vi_insertion_keymap,
+         since we're supposed to be in insert mode replacing characters
+       - rl_vi_replace: call rl_vi_start_inserting to set last command to
+         `R' for undo
+       - rl_vi_replace: set _rl_vi_last_key_before_insert to `R' for future
+         use by _rl_vi_done_inserting
+       - vi_save_insert_buffer: new function, broke out code that copies text
+         into vi_insert_buffer from _rl_vi_save_insert
+       - _rl_vi_save_replace: new function, saves text modified by
+         rl_vi_replace (using current point and vi_replace_count to figure
+         it out) to vi_replace_buffer
+       - _rl_vi_save_insert: call vi_save_insert_buffer
+       - _rl_vi_done_inserting: if _rl_vi_last_key_before_insert == 'R', call
+         _rl_vi_save_replace to save text modified in replace mode (uses
+         vi_save_insert_buffer)
+       - _rl_vi_replace_insert: new function, replaces the number of chars
+         in vi_insert_buffer after rl_point with contents ov vi_insert_buffer
+       - rl_vi_redo: call _rl_vi_replace_insert if last command == 'R' and
+         there's something in vi_insert_buffer.  Fixes bug with `.' not
+         redoing the most recent `R' command, reported by Geoff Clare
+         <g.clare@opengroup.org> in readline area on savannah
+
+                                  11/26
+                                  -----
+lib/readline/rlprivate.h
+       - RL_SIG_RECEIVED(): evaluate to non-zero if there is a pending signal
+         to be handled
+       - RL_SIGINT_RECEIVED(): evaluate to non-zero if there is a pending
+         SIGINT to be handled
+
+lib/readline/complete.c
+       - remove all mention of _rl_interrupt_immediately
+       - rl_completion_matches: check RL_SIG_RECEIVED after each call to
+         the entry function, call RL_CHECK_SIGNALS if true to handle the
+         signal
+       - rl_completion_matches: if RL_SIG_RECEIVED evaluates to true, free
+         and zero out the match_list this function allocated
+       - rl_completion_matches: if the completion entry function is
+         rl_filename_completion_function, free the contents of match_list,
+         because that function does not keep state and will not free the
+         entries; avoids possible memory leak pointed out by
+         Garrett Cooper <yanegomi@gmail.com>
+       - gen_completion_matches: if RL_SIG_RECEIVED evalutes to true after
+         calling rl_attempted_completion_function, free the returned match
+         list and handle the signal with RL_CHECK_SIGNALS; avoids
+         possible memory leak pointed out by Garrett Cooper
+         <yanegomi@gmail.com>
+       - gen_completion_matches: if RL_SIG_RECEIVED evaluates to true after
+         calling rl_completion_matches, free the returned match list and
+         handle the signal with RL_CHECK_SIGNALS
+
+lib/readline/util.c
+       - rl_settracefp: new utility function to set the tracing FILE *
+
+lib/readline/signals.c
+       - _rl_sigcleanup: pointer to a function that will be called with the
+         signal and a void * argument from _rl_handle_signal
+       - _rl_sigcleanarg: void * that the rest of the code can set to have
+         passed to the signal cleanup function
+       - _rl_handle_signal: if _rl_sigcleanup set, call as
+               (*_rl_sigcleanup) (sig, _rl_sigcleanarg)
+
+lib/readline/rlprivate.h
+       - extern declarations for _rl_sigcleanup and _rl_sigcleanarg
+
+lib/readline/complete.c
+       - _rl_complete_sigcleanup: signal cleanup function for completion code;
+         calls _rl_free_match_list on _rl_sigcleanarg if signal == SIGINT
+       - rl_complete_internal: before calling display_matches if what_to_do
+         == `?', set _rl_sigcleanup to _rl_complete_sigcleanup so the match
+         list gets freed on SIGINT; avoids possible memory leak pointed out
+         by Garrett Cooper <yanegomi@gmail.com>
+       - rl_complete_internal: in default switch case, call _rl_free_match_list
+         before returning to avoid memory leak
+
+doc/bashref.texi
+       - start at a set of examples for the =~ regular expression matching
+         operator, touching on keeping the pattern in a shell variable and
+         quoting portions of the pattern to remove their special meaning
+
+                                  12/1
+                                  ----
+lib/glob/gmisc.c
+       - extglob_pattern: new function, returns 1 if pattern passed as an
+         argument looks like an extended globbing pattern
+
+lib/glob/glob.c
+       - skipname: return 0 immediately if extglob_pattern returns non-zero,
+         let the extended globbing code do the right thing with skipping
+         names beginning with a `.'
+       - mbskipname: return 0 immediately if extglob_pattern returns non-zero,
+         let the extended globbing code do the right thing with skipping
+         names beginning with a `.'.  Fixes bug reported by Yongzhi Pan
+         <panyongzhi@gmail.com>
+
+                                  12/2
+                                  ----
+lib/glob/smatch.c
+       - patscan, patscan_wc: no longer static so other parts of the glob
+         library can use them, renamed to glob_patscan, glob_patscan_wc
+
+lib/glob/glob.c
+       - extern declarations for glob_patscan, glob_patscan_wc
+       - wchkname: new function, does skipname on wchar_t pattern and dname,
+         old body of mbskipname after converting to wide chars
+       - extglob_skipname: new function, checks all subpatterns in an extglob
+         pattern to determine whether or not a filename should be skipped.
+         Calls skipname for each subpattern.  Dname is only skipped if all
+         subpatterns indicate it should be.  Better fix for bug reported by
+         Yongzhi Pan <panyongzhi@gmail.com>
+       - wextglob_skipname: wide-char version of extglob_skipname, calls
+         wchkname instead of calling back into mbskipname for each
+         subpattern to avoid problems with char/wchar_t mismatch
+       - skipname: call extglob_skipname if extglob_pattern returns non-zero
+       - mbskipname: call wextglob_skipname if extglob_pattern returns non-zero
+       - mbskipname: short-circuit immediately if no multibyte chars in
+         pattern or filename
+
+execute_cmd.c
+       - execute_cond_node: added parens to patmatch assignment statement to
+         make intent clearer
+
+                                  12/3
+                                  ----
+configure.in,config.h.in
+       - check for imaxdiv, define HAVE_IMAXDIV if present
+
+expr.c
+       - expassign, exp2: use imaxdiv if available.  Doesn't help with checks
+         for overflow from 10/25
+
+                                  12/6
+                                  ----
+lib/readline/complete.c
+       - compute_lcd_of_matches: if we're ignoring case in the matches, only
+         use what the user typed as the lcd if it matches the first match
+         (after sorting) up to the length of what was typed (if what the
+         user typed is longer than the shortest of the possible matches, use
+         the shortest common length of the matches instead).  If it doesn't
+         match, use the first of the list of matches, as if case were not
+         being ignored.  Fixes bug reported by Clark Wang
+         <dearvoid@gmail.com>
+
+                                  12/7
+                                  ----
+builtins/cd.def
+       - cd_builtin: add code to return error in case cd has more than one
+         non-option argument, conditional on CD_COMPLAINS define (which is
+         not defined anywhere)
+
+doc/{bash.1,bashref.texi}
+       - note that additional arguments to cd following the directory name
+         are ignored.  Suggested by Vaclav Hanzl <hanzl@noel.feld.cvut.cz>
+
+                                  12/10
+                                  -----
+lib/readline/input.c
+       - rl_read_key: don't need to increment key sequence length here; doing
+         it leads to an off-by-one error
+
+lib/readline/macro.c
+       - rl_end_kbd_macro: after off-by-one error with rl_key_sequence_length
+         fixed, can decrement current_macro_index by rl_key_sequence_length
+         (length of key sequence that closes keyboard macro)
+
+lib/readline/readline.c
+       - _rl_dispatch_subseq: fix extra increment of rl_key_sequence_length
+         when ESC maps to a new keymap and we're converting meta characters
+         to ESC+key
+       - _rl_dispatch_subseq: better increment of rl_key_sequence_length
+         before we dispatch to a function in the ISFUNC case (where the
+         second increment above should have happened)
+       - rl_executing_keyseq: the full key sequence that ended up executing
+         a readline command.  Available to the calling application, maintained
+         by _rl_dispatch_subseq, indexed by rl_key_sequence_length
+       - rl_executing_key: the key that was bound to the currently-executing
+         readline command.  Same as the `key' argument to the function
+
+lib/readline/readline.h
+       - rl_executing_keyseq: extern declaration
+       - rl_executing_key: extern declaration
+       - rl_key_sequence_length: declaration moved here from rlprivate.h,
+         now part of public interface
+
+lib/readline/rlprivate.h
+       - new extern declaration for _rl_executing_keyseq_size, buffer size
+         for rl_executing_keyseq
+
+lib/readline/doc/rltech.texi
+       - documented new variables: rl_executing_key, rl_executing_keyseq,
+         rl_key_sequence_length
+
+                                  12/13
+                                  -----
+bashline.c
+       - bash_execute_unix_command: replace ad-hoc code that searches
+         cmd_xmap for correct command with call to rl_function_of_keyseq
+         using rl_executing_keyseq; now supports key sequences longer
+         than two characters.  Fixes bug reported by Michael Kazior
+         <kazikcz@gmail.com>
+
+                                  12/15
+                                  -----
+make_cmd.c
+       - make_function_def: don't null out source_file before calling
+         make_command so it can be used later on when the function definition
+         is executed
+
+execute_cmd.c
+       - execute_intern_function: second argument is now FUNCTION_DEF *
+         instead of COMMAND *
+       - execute_command_internal: call execute_intern_function with the
+         new second argument (the entire FUNCTION_DEF instead of just the
+         command member)
+       - execute_intern_function: if DEBUGGER is defined, call
+         bind_function_def before calling bind_function, just like
+         make_function_def does (might be able to take out the call in
+         make_function_def depending on what the debugger does with it).
+         Fixes bug reported by <dethrophes@motd005>
+
+expr.c
+       - more minor changes to cases of INTMAX_MIN % -1 and INTMAX_MIN / 1;
+         fix typos and logic errors
+
+                                  12/16
+                                  -----
+bashline.c
+       - find_cmd_start: change flags to remove SD_NOSKIPCMD so it skips over
+         command substitutions and doesn't treat them as command separators
+       - attempt_shell_completion: instead of taking first return from
+         find_cmd_name as command name to use for programmable completion,
+         use loop to skip over assignment statements.  Fixes problem reported
+         by Raphael Droz <raphael.droz+floss@gmail.com>
+       - attempt_shell_completion: if we don't find a command name but the
+         command line is non-empty, assume the other words are all assignment
+         statements and flag that point is in a command position so we can
+         do command name completion
+       - attempt_shell_completion: if the word being completed is the first
+         word following a series of assignment statements, and the
+         command line is non-empty, flag that point is in a command position
+         so we can do command name completion
+
+lib/readline/history.c
+       - history_get_time: atol -> strtol
+
+                                  12/18
+                                  -----
+parse.y
+       - parser_in_command_position: external interface to the
+         command_token_position macro for use by other parts of the shell,
+         like the completion mechanism
+
+externs.h
+       - extern declaration for parser_in_command_position
+
+                                  12/19
+                                  -----
+
+builtins/read.def
+       - read_builtin: make sure all calls to bind_read_variable are passed
+         a non-null string.  Fixes bug reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+bashline.c
+       - attempt_shell_completion: mark that we're in a command position if
+         we're at the start of the line and the parser is ready to accept
+         a reserved word or command name.  Feature most recently suggested
+         by Peng Yu <pengyu.ut@gmail.com>
+
+                                  12/21
+                                  -----
+lib/readline/bind.c
+       - _rl_escchar: return the character that would be backslash-escaped
+         to denote the control character passed as an argument ('\n' -> 'n')
+       - _rl_isescape: return 1 if character passed is one that has a
+         backslash escape
+       - _rl_untranslate_macro_value: new second argument: use_escapes, if
+         non-zero translate to backslash escapes where possible instead of
+         using straight \C-x for control character `x'.  Change callers
+       - _rl_untranslate_macro_value: now global
+
+lib/readline/rlprivate.h
+       - _rl_untranslate_macro_value: extern declaration
+
+lib/readline/{macro.c,readline.h}
+       - rl_print_last_kbd_macro: new bindable function, inspired by patch
+         from Mitchel Humpherys
+
+lib/readline/funmap.c
+       - print-last-kbd-macro: new bindable command, bound to
+         rl_print_last_kbd_macro
+
+lib/readline/doc/{rluser.texi,readline.3},doc/bash.1
+       - print-last-kbd-macro: document.
+
+lib/readline/text.c
+       - _rl_insert_next: if we're defining a macro, make sure the key gets
+         added to the macro text (should really audit calls to rl_read_key()
+         and make sure the right thing is happening for all of them)
+
+bashline.[ch]
+       - print_unix_command_map: new function, prints all bound commands in
+         cmd_xmap using rl_macro_dumper in a reusable format
+
+builtins/bind.def
+       - new -X option: print all keysequences bound to Unix commands using
+         print_unix_command_map.  Feature suggested by Dennis Williamson
+         (2/2011)
+
+doc/{bash.1,bashref.texi}
+       - document new `bind -X' option
+
+                                  12/24
+                                  -----
+
+doc/{bash.1,bashref.texi}
+       - add a couple of sentences to the description of the case modification
+         operators making it clearer that each character of parameter is
+         tested against the pattern, and that the pattern should only attempt
+         to match a single character.  Suggested by Bill Gradwohl
+         <bill@ycc.com>
+
+                                  12/28
+                                  -----
+shell.c
+       - init_noninteractive: instead of calling set_job_control(0) to
+         unconditionally turn off job control, turn on job control if
+         forced_interactive or jobs_m_flag is set
+       - shell_initialize: call initialize_job_control with jobs_m_flag as
+         argument so `bash -m script' enables job control while running the
+         script
+
+jobs.c
+       - initialize_job_control: if the `force' argument is non-zero, turn on
+         job control even if the shell is not currently interactive
+         (interactive == 0)
+
+                                  12/29
+                                  -----
+
+flags.h
+       - new extern declaration for jobs_m_flag
+
+builtins/{cd,set}.def,doc/{bash.1,bashref.texi}
+       - added text clarifying the descriptions of cd -L and -P, suggested by
+         Padraig Brady <p@draigbrady.com>
+       - slight change to the description of `set -P' about resolving symbolic
+         links
+
+lib/readline/doc/rluser.texi
+       - Added an example to the programmable completion section: _comp_cd,
+         a completion function for cd, with additional verbiage.  Text
+         includes a reference to the bash_completion project
+
+                                1/1/2012
+                                --------
+jobs.c
+       - set_job_status_and_cleanup: note that a job is stopped due to
+         SIGTSTP (any_tstped) if job_control is set; there's no need to
+         test interactive
+
+                                   1/5
+                                   ---
+quit.h
+       - LASTSIG(): new macro, expands to signal number of last terminating
+         signal received (terminating_signal or SIGINT)
+
+trap.c
+       - first_pending_trap: returns lowest signal number with a trap pending
+       - trapped_signal_received: set to the last trapped signal the shell
+         received in trap_handler(); reset to 0 in run_pending_traps
+
+builtins/read.def
+       - read_builtin: changes to posix-mode (posixly_correct != 0) to make
+         `read' interruptible by a trapped signal.  After the trap runs,
+         read returns 128+sig and does not assign the partially-read line
+         to the named variable(s).  From an austin-group discussion started
+         by David Korn
+
+                                  1/11
+                                  ----
+doc/{bash.1,bashref.texi}
+       - slight changes to the descriptions of the compat32 and compat40 shell
+         options to clarify their meaning
+
+                                  1/12
+                                  ----
+lib/readline/{colors.[ch],parse-colors.[ch]}
+       - new files, part of color infrastructure support
+
+Makefile.in,lib/readline/Makefile.in
+       - arrange to have colors.o and parse-colors.o added to readline
+         library
+
+{configure,config.h}.in
+       - check for stdbool.h, define HAVE_STDBOOL_H if found
+
+                                  1/14
+                                  ----
+lib/readline/bind.c
+       - colored_stats: new bindable variable, enables using colors to
+         indicate file type when listing completions
+
+lib/readline/complete.c
+       - _rl_colored_stats: new variable, controlled by colored-stats bindable
+         variable
+       - colored_stat_start, colored_stat_end: new functions to set and reset
+         the terminal color appropriately depending on the type of the
+         filename to be printed
+       - print_filename: changes to print colors if `colored-stats' variable
+         set.  Changes contributed by Raphael Droz
+         <raphael.droz+floss@gmail.com>
+
+lib/readline/readline.c
+       - rl_initialize_everything: add call to _rl_parse_colors to parse
+         color values out of $LS_COLORS.  May have to add to rl_initialize
+         to make more dynamic if LS_COLORS changes (which doesn't happen
+         very often, if at all)
+
+lib/readline/rlprivate.h
+       - _rl_colored_stats: new extern declaration
+
+lib/readline/doc/{readline.3,rluser.texi},doc/bash.1
+       - colored-stats: document new bindable readline variable
+
+lib/readline/colors.c
+       - _rl_print_color_indicator: call rl_filename_stat_hook before calling
+         lstat/stat so we can get color indicators for stuff like
+         $HOME/Applications
+
+lib/readline/complete.c
+       - stat_char: call rl_filename_stat_hook before calling lstat/stat
+
+findcmd.[ch],execute_cmd.c
+       - search_for_command: now takes a second `flags' argument; changed
+         header function prototype and callers
+       - search_for_command: if (flags & 1), put the command found in $PATH
+         into the command hash table (previous default behavior)
+
+execute_cmd.c
+       - is_dirname: call search_for_command with flags argument of 0 so it
+         doesn't try to put something in the command hash table
+
+bashline.c
+       - bash_command_name_stat_hook: a hook function for readline's
+         filename_stat_hook that does $PATH searching the same way that
+         execute_cmd.c:execute_disk_command() does it, and rewrites the
+         passed filename if found.  Does not put names into command hash
+         table.  This allows command name completion to take advantage
+         of `visible-stats' and `colored-stats' settings.
+       - executable_completion: new function, calls the directory completion
+         hook to expand the filename before calling executable_file or
+         executable_or_directory; change command_word_completion_function to
+         call executable_completion.  This allows $HOME/bin/[TAB] to do
+         command completion and display alternatives
+
+                                  1/17
+                                  ----
+pcomplete.c
+       - gen_command_matches: now takes a new second argument: the command
+         name as deciphered by the programmable completion code and used
+         to look up the compspec; changed callers (gen_compspec_completions)
+       - gen_shell_function_matches: now takes a new second argument: the
+         command that originally caused the completion function to be
+         invoked; changed callers (gen_compspec_completions))
+       - build_arg_list: now takes a new second argument: the command name
+         corresponding to the current compspec; changed callers
+         (gen_command_matches, gen_shell_function_matches)
+       - build_arg_list: now uses `cmd' argument to create $1 passed to
+         invoked command or shell function
+       - gen_compspec_completions: if we skipped a null command at the
+         beginning of the line (e.g., for completing `>'), add a new word for
+         it at the beginning of the word list and increment nw and cw
+         appropriately.  This is all a partial fix for the shortcoming
+         pointed out by Sung Pae <sungpae@gmail.com>
+
+                                  1/18
+                                  ----
+
+{configure,config.h}.in
+       - new check: check for AUDIT_USER_TTY defined in <linux/audit.h>,
+         define HAVE_DECL_AUDIT_USER_TTY if both are found
+
+lib/readline/rlconf.h
+       - ENABLE_TTY_AUDIT_SUPPORT: new define, allows use of the Linux kernel
+         tty auditing system if it's available and enabled
+
+lib/readline/util.c
+       - _rl_audit_tty: new function, send a string to the kernel tty audit
+         system
+
+lib/readline/rlprivate.h
+       - _rl_audit_tty: new extern declaration
+
+lib/readline/readline.c
+       - readline: call _rl_audit_tty with line to be returned before returning
+         it if the Linux tty audit system is available and it's been enabled
+         in rlconf.h  Original patch from Miroslav Trmac; recent request
+         from Miroslav Lichvar <mlichvar@redhat.com>
+
+                                  1/21
+                                  ----
+
+lib/readline/readline.c:
+       - _rl_dispatch_subseq: add an inter-character timeout for multi-char
+         key sequences.  Suggested by <rogerx.oss@gmail.com>.  Still needs
+         work to make a user-settable variable
+
+parse.y
+       - shell_getc: make code that uses the pop_alias dependent on ALIAS
+         define
+
+variables.h
+       - sv_tz: extern define should only depend on HAVE_TZSET
+
+expr.c
+       - expr_streval: if ARRAY_VARS is not defined, set lvalue->ind to -1;
+         move assignment to `ind' inside define
+       - expr_bind_array_element: declaration and uses need to be #ifdef
+         ARRAY_VARS
+
+arrayfunc.h
+       - AV_ALLOWALL, AV_QUOTED, AV_USEIND: define to 0 if ARRAY_VARS not
+         defined; used in subst.c unconditionally
+
+sig.h
+       - make the signal blocking functions not dependent on JOB_CONTROL
+
+sig.c
+       - sigprocmask: make the replacement definition not dependent on
+         JOB_CONTROL
+
+trap.c
+       - use BLOCK_SIGNAL/UNBLOCK_SIGNAL instead of code dependent on
+         HAVE_POSIX_SIGNALS and BSD signals
+
+                                  1/24
+                                  ----
+
+print_cmd.c
+       - print_redirection_list: change the conditions under which
+         r_duplicating_output_word is mapped to r_err_and_out to more or
+         less match those used in redir.c.  Fixes bug pointed out by
+         Dan Douglas <ormaaj@gmail.com>
+
+
+                                  1/29
+                                  ----
+lib/readline/signals.c
+       - _rl_block_sigwinch,_rl_release_sigwinch: don't compile in bodies
+         unless SIGWINCH is defined.  Fixes bug reported by Pierre Muller
+         <pierre.muller@ics-cnrs.unistra.fr>
+
+doc/{bash.1,bashref.texi}
+       - small modifications to the introduction to the REDIRECTION section
+         to describe how redirections can modify file handles
+       - small modification to the section describing base#n to make it
+         clearer that n can be denoted using non-numerics.  From a posting
+         by Linda Walsh <bash@tlinx.org>
+
+                                   2/2
+                                   ---
+builtins/printf.def
+       - printf_builtin: make sure vbuf is intialized and non-null when -v
+         is supplied, since other parts of the code assume that it's not
+         null (e.g., bind_printf_variable()).  Fixes bug reported by Jim
+         Avera <james_avera@yahoo.com>
+
+                                   2/4
+                                   ---
+lib/readline/undo.c
+       - _rl_free_undo_list: new function, old body of rl_free_undo_list,
+         frees undo entries in UNDO_LIST * passed as argument
+       - rl_free_undo_list: call _rl_free_undo_list
+
+lib/readline/rlprivate.h
+       - _rl_free_undo_list: new extern declaration
+       - _rl_keyseq_timeout: new extern declaration (see below)
+
+lib/readline/misc.c
+       - rl_clear_history: new function.  Clears the history list and frees
+         all associated data similar to history.c:clear_history(), but
+         takes rl_undo_list into account and frees and UNDO_LISTs saved as
+         `data' members of a history list entry
+
+lib/readline/doc/rltech.texi
+       - rl_clear_history: documented
+
+lib/readline/readline.c
+       - _rl_keyseq_timeout: new variable to hold intra-key timeout value
+         from 1/21 fix; specified in milliseconds.  Default value is 500
+       - _rl_dispatch_subseq: change to use _rl_keyseq_timeout as intra-key
+         timeout if it's greater than 0; no timeout if <= 0
+       - _rl_dispatch_subseq: don't check for queued keyboard input if we have
+         pushed or pending input, or if we're reading input from a macro
+
+lib/readline/bind.c
+       - keyseq-timeout: new bindable variable, shadows _rl_keyseq_timeout
+       - string_varlist: add keyseq-timeout
+       - sv_seqtimeout: new function to modify value of _rl_keyseq_timeout;
+         clamps negative values at 0 for now
+       - _rl_get_string_variable_value: return value for keyseq-timeout
+
+doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
+       - keyseq-timeout: documented
+
+lib/readline/isearch.c
+       - _rl_isearch_dispatch: modification to fix from 7/18 to not use
+         cxt->keymap and cxt->okeymap, since by the time this code is
+         executed, they are equal.  Use `f' to check for rl_insert or
+         unbound func
+       - _rl_isearch_dispatch: if we're switching keymaps, not in
+         callback mode, and don't have pending or pushed input, use
+         _rl_input_queued to resolve a potentially ambiguous key sequence.
+         Suggested by Roger Zauner <rogerx.oss@gmail.com>
+       - _rl_isearch_dispatch: if we have changed keymaps and resolved to
+         an editing function (not self-insert), make sure we stuff the
+         right characters back onto the input after changing the keymap
+         back so the right editing function is executed after the search
+         is terminated.  Rest of fix for bug reported by Roger Zauner
+         <rogerx.oss@gmail.com>
+
+                                   2/5
+                                   ---
+builtins/gen-helpfiles.c
+       - new file: reads struct builtin and writes the long docs to files
+         in the `helpdirs' subdirectory.  The filename is given in the
+         previously-unused `handle' member of the struct builtin.  Links
+         with `tmpbuiltins.o', which is created by Makefile to have the
+         right long documentation.  When not cross-compiling, gets the
+         right #defines based on configuration options from config.h instead
+         of trying to parse conditional parts of def files.  Fixes
+         shortcoming pointed out by Andreas Schwab <schwab@linux-m68k.org>
+
+builtins/Makefile.in
+       - tmpbuiltins.c: new generated file, created to enable creation of
+         separate helpfiles based on correct #defines instead of trying to
+         parse conditional parts of def files
+       - gen-helpfiles: new program to generate helpfiles, links with
+         tmpbuiltins.o
+       - HELPFILES_TARGET: new target, substituted by configure to `helpdoc'
+         if separate helpfiles requested
+       - targets: new target, libbuiltins.a and $(HELPFILES_TARGET)
+       - CREATED_OBJECTS: new variable, holds created object files for
+         make clean; changed make clean to remove created objects
+       - helpdoc: changed to call gen-helpfiles instead of mkbuiltins
+
+Makefile.in
+       - when building libbuiltins.a, recursively call make with `targets'
+         argument to make sure separate helpfiles get built
+
+configure.in
+       - substitute `helpdoc' as value of HELPFILES_TARGET if
+         --enable-separate-helpfiles supplied as configure argument
+
+builtins/mkbuiltins.c
+       - `-nofunctions': new argument, causes mkbuiltins to not write value
+         for function implementing a particular builtin to struct builtin
+         and to write document file name to `handle' member of struct builtin
+       - no longer writes separate helpfiles; that is left to gen-helpfiles
+
+                                   2/8
+                                   ---
+subst.c
+       - make sure last_command_exit_value is set to a non-zero value before
+         any calls to report_error, since `-e' set will short-circuit
+         report_error.  Fixes bug reported by Ewan Mellor
+         <Ewan.Mellor@eu.citrix.com>
+
+variables.c
+       - make_local_array_variable: added second argument; if non-zero,
+         function will return an existing local associative array variable
+         instead of insisting on an indexed array
+
+variable.h,subst.c
+       - make_local_array_variable: changed prototype and caller
+
+builtins/declare.def
+       - declare_internal: add second arg to call to make_local_array_variable;
+         making_array_special, which indicates we're processing an
+         assignment like declare a[b]=c.  Fixes seg fault resulting from
+         a being an already-declared local associative array variable in a
+         function.  Ubuntu bash bug 928900.
+
+                                  2/14
+                                  ----
+
+execute_cmd.c
+       - execute_command_internal: if redirections into or out of a loop fail,
+         don't try to free ofifo_list unless saved_fifo is non-zero.  It's
+         only valid if saved_fifo is set
+
+                                  2/15
+                                  ----
+{arrayfunc,braces,variables}.c
+       - last_command_exit_value: make sure it's set before any calls to
+         report_error, since -e will cause that to exit the shell
+
+builtins/common.c
+       - get_job_by_name: call internal_error instead of report_error so this
+         doesn't exit the shell
+
+                                  2/18
+                                  ----
+builtins/evalstring.c
+       - parse_and_execute: make sure the file descriptor to be redirected to
+         is 1 before calling cat_file.  One fix for bug reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+parse.y
+       - read_token_word: don't return NUMBER if a string of all digits
+         resolves to a number that overflows the bounds of an intmax_t.
+         Other fix for bug reported by Dan Douglas <ormaaj@gmail.com>
+
+                                  2/19
+                                  ----
+lib/sh/strtrans.c
+       - ansicstr: use 0x7f as the boundary for characters that translate
+         directly from ASCII to unicode (\u and \U escapes) instead of
+         UCHAR_MAX, since everything >= 0x80 requires more than one byte.
+         Bug and fix from John Kearney <dethrophes@web.de>
+
+builtins/printf.def
+       - tescape: ditto for printf \u and \U escape sequences
+
+                                  2/20
+                                  ----
+lib/sh/unicode.c
+       - u32toutf8: fix to handle encodings up to six bytes long correctly
+         (though technically UTF-8 only has characters up to 4 bytes long).
+         Report and fix from John Kearney <dethrophes@web.de>
+       - u32toutf8: first argument is now an unsigned 32-bit quantity,
+         changed callers (u32cconv) to pass c instead of wc
+       - u32reset: new function, resets local static state to uninitialized
+         (locale information, currently)
+
+locale.c
+       - call u32reset whenever LC_CTYPE/LC_ALL/LANG is changed to reset the
+         cached locale information used by u32cconv.  From a report from
+         John Kearney <dethrophes@web.de>
+
+                                  2/21
+                                  ----
+doc/{bash,builtins}.1
+       - minor changes from Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+lib/sh/unicode.c
+       - u32cconv: only assume you can directly call wctomb on the passed
+         value if __STDC_ISO_10646__ is defined and the value is <=
+         0x7fffffff
+       - stub_charset: return locale as default instead of "ASCII", let
+         rest of code decide what to do with it
+
+lib/readline/parens.c
+       - _rl_enable_paren_matching: make paren matching work in vi insert
+         mode.  Bug report from <derflob@derflob.de>
+
+                                  2/22
+                                  ----
+lib/sh/shquote.c
+       - sh_backslash_quote: quote tilde in places where it would be
+         expanded.  From a report from John Kearney <dethrophes@web.de>
+
+                                  2/23
+                                  ----
+execute_cmd.c
+       - execute_pipeline: wrap the discard_unwind_frame call in #ifdef
+         JOB_CONTROL, since the frame is only created if JOB_CONTROL is
+         defined.  Bug and fix from Doug Kehn <rdkehn@yahoo.com>
+
+                                  2/25
+                                  ----
+error.c
+       - report_error: make sure last_command_exit_value is non-zero before
+         we call exit_shell, since the exit trap may reference it.  Call
+         exit_shell with last_command_exit_value to allow exit statuses
+         other than 1
+
+unicode.c
+       - stub_charset: use local static buffer to hold charset, don't change
+         value returned by get_locale_var.  Based on idea and code from
+         John Kearney <dethrophes@web.de>
+       - u32toutf16: function to convert unsigned 32-bit value (unicode) to
+         UTF-16.  From John Kearney <dethrophes@web.de>
+       - u32cconv: call u32toutf16 if __STDC_ISO_10646__ defined and wchar_t
+         is two bytes, send result to wcstombs, return if not encoding error.
+         From John Kearney <dethrophes@web.de>
+       - u32cconv: return UTF-8 conversion if iconv conversion to local
+         charset is unsupported
+
+                                   3/2
+                                   ---
+lib/readline/complete.c
+       - print_filename: if there is no directory hook, but there is a stat
+         hook, and we want to append a slash to directories, call the stat
+         hook before calling path_isdir on the expanded directory name.
+         Report and pointer to fix from Steve Rago <sar@nec-labs.com>
+
+                                   3/3
+                                   ---
+builtins/evalstring.c
+       - parse_and_execute: fix to change of 2/18: make sure the file
+         descriptor being redirected to is 0 before calling cat_file when
+         we see something like $(< file).  Real fix for bug reported by
+         Dan Douglas <ormaaj@gmail.com>
+
+subst.c
+       - parameter_brace_patsub: run the replacement string through quote
+         removal even if the expansion is within double quotes, because
+         the parser and string extract functions treat the quotes and
+         backslashes as special.  If they're treated as special, quote
+         removal should remove them (this is the Posix position and
+         compatible with ksh93).  THIS IS NOT BACKWARDS COMPATIBLE.
+
+                                   3/4
+                                   ---
+lib/readline/complete.c
+       - rl_menu_complete: fix to make show-all-if-ambiguous and
+         menu-complete-display-prefix work together if both are set.  Fix
+         from Sami Pietila <sami.pietila@gmail.com>
+
+                                   3/5
+                                   ---
+bashline.c
+       - dircomplete_expand_relpath: new variable, if non-zero, means that
+         `shopt -s direxpand' should expand relative pathnames.  Zero by
+         default, not user-settable yet
+       - bash_directory_completion_hook: if we have a relative pathname that
+         isn't changed by canonicalization or spell checking after being
+         appended to $PWD, then don't change what the user typed.  Controlled
+         by dircomplete_expand_relpath
+
+                                   3/7
+                                   ---
+m4/timespec.m4
+       - new macros, cribbed from gnulib and coreutils: find out whether we
+         have `struct timespec' and what file includes it
+
+m4/stat-time.m4
+       - new macros, cribbed from gnulib and coreutils: find out whether the
+         mtime/atime/ctime/etctime fields of struct stat are of type
+         struct timespec, and what the name is
+
+include/stat-time.h
+       - new file, cribbed from gnulib, with additions from coreutils: include
+         the right file to get the struct timespec define, or provide our own
+         replacement.  Provides a bunch of inline functions to turn the
+         appropriate members of struct stat into `struct timespec' values,
+         zeroing out the tv_nsec field if necessary
+
+test.c
+       - include "stat-time.h" for the nanosecond timestamp resolution stuff
+       - stat_mtime: new function, returns struct stat and the mod time
+         normalized into a `struct timespec' for the filename passed as the
+         first argument
+       - filecomp: call stat_mtime instead of sh_stat for each filename
+         argument to get the mtime as a struct timespec
+       - filecomp: call timespec_cmp instead of using a straight arithmetic
+         comparison for the -nt and -ot operators, using timespec returned by
+         stat_mtime.  Added functionality requested by by Werner Fink
+         <werner@suse.de> for systems that can support it
+
+                                  3/10
+                                  ----
+include/posixdir.h
+       - REAL_DIR_ENTRY: remove dependency on _POSIX_SOURCE, only use feature
+         test macros to decide whether dirent.d_ino is present and usable;
+         define D_INO_AVAILABLE.  Report and fix from Fabrizion Gennari
+         <fabrizio.ge@tiscali.it>
+       - D_FILENO_AVAILABLE: define if we can use dirent.d_fileno
+
+lib/sh/getcwd.c
+       - use D_FILENO_AVAILABLE to decide whether or not to compile in
+         _path_checkino and whether or not to call it.  Report and initial
+         fix from Fabrizion Gennari <fabrizio.ge@tiscali.it>
+
+lib/readline/signals.c
+       - make sure all occurrences of SIGWINCH are protected by #ifdef
+
+sig.c
+       - make sure all occurrences of SIGCHLD are protected by #ifdef
+
+nojobs.c
+       - make sure SA_RESTART is defined to 0 if the OS doesn't define it
+
+version.c
+       - show_shell_version: don't use string literals in printf, use %s.
+         Has added benefit of removing newline from string to be translated
+
+trap.c
+       - queue_sigchld_trap: new function, increments the number of pending
+         SIGCHLD signals by the argument, which is by convention the number
+         of children reaped in a call to waitchld()
+
+trap.h
+       - queue_sigchld_trap: new extern declaration
+
+jobs.c
+       - waitchld: if called from the SIGCHLD signal handler (sigchld > 0),
+         then call queue_sigchld_trap to avoid running the trap in a signal
+         handler context.  Report and original fix from Siddhesh Poyarekar
+         <siddhesh@redhat.com>
+
+lib/sh/unicode.c
+       - u32tocesc: take an unsigned 32-bit quantity and encode it using
+         ISO C99 string notation (\u/\U)
+       - u32cconv: call u32tocesc as a fallback instead of u32cchar
+       - u32cconv: call u32tocesc if iconv cannot convert the character.
+         Maybe do the same thing if iconv_open fails
+       - u32reset: call iconv_close on localconv if u32init == 1
+
+                                  3/11
+                                  ----
+config-top.h
+       - CHECKWINSIZE_DEFAULT: new define, set to initial value of
+         check_window_size (shopt checkwinsize): 0 for off, 1 for on.
+         Default is 0
+
+{jobs,nojobs}.c
+       - check_window_size: default initial value to CHECKWINSIZE_DEFAULT
+
+                                  3/13
+                                  ----
+doc/bashref.texi
+       - change text referring to the copying restrictions to that
+         recommended by the FSF (no Front-Cover Texts and no Back-Cover
+         Texts)
+
+lib/readline/doc/{history,rlman,rluserman}.texi
+       - change text referring to the copying restrictions to that
+         recommended by the FSF (no Front-Cover Texts and no Back-Cover
+         Texts)
+
+                                  3/15
+                                  ----
+array.c
+       - LASTREF_START: new macro to set the starting position for an array
+         traversal to `lastref' if that's valid, and to the start of the array
+         if not.  Used in array_reference, array_insert, array_remove
+       - array_remove: try to be a little smarter with lastref instead of
+         unconditionally invalidating it
+
+                                  3/16
+                                  ----
+array.c
+       - array_insert: fix memory leak by deleting element to be added in the
+         case of an error
+
+                                  3/18
+                                  ----
+lib/sh/mbschr.c
+       - mbschr: don't call mbrlen unless is_basic is false; devolves to a
+         straight character-by-character run through the string
+
+                                  3/19
+                                  ----
+stringlib.c
+       - substring: use memcpy instead of strncpy, since we know the length
+         and are going to add our own NUL terminator
+
+                                  3/20
+                                  ----
+subst.c
+       - parameter_brace_expand_rhs: if expand_string_for_rhs returns a quoted
+         null string (a list with one element for which
+         QUOTED_NULL(list->word->word) returns true), return the quoted null
+         and set the flags in the returned word to indicate it.  Fixes bug
+         reported by Mark Edgar <medgar123@gmail.com>
+
+lib/sh/tmpfile.c
+       - use random(3) instead of get_random_number to avoid perturbing the
+         random sequence you get using $RANDOM.  Bug report and fix from
+         Jurij Mihelic <jurij.mihelic@fri.uni-lj.si>
+
+                                  3/21
+                                  ----
+config-top.h
+       - OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT: define to 1 to optimize
+         sequential indexed array assignment patterns.  Defined to 1 by
+         default
+
+array.c
+       - array_insert: if OPTIMIZE_SEQUENTIAL_ARRAY_ASSIGNMENT is defined,
+         start the search at lastref (see change from 3/15)
+
+                                  3/27
+                                  ----
+print_cmd.c
+       - debug_print_word_list: new debugging function, prints a word list
+         preceded by an optional string and using a caller-specified
+         separator
+
+                                   4/1
+                                   ---
+command.h
+       - W_ASSNGLOBAL: new flag, set to indicate declare -g
+
+execute_cmd.c
+       - fix_assignment_words: note that we have a -g argument to an assignment
+         builtin and set the W_ASSNGLOBAL flag in the variable word
+
+subst.c
+       - dump_word_flags: print out W_ASSNGLOBAL if present
+       - do_assignment_internal: only set ASS_MKLOCAL if W_ASSIGNARG is set
+         and W_ASSNGLOBAL is not.  Don't want to create a local variable even
+         if variable_context is non-zero if ASSNGLOBAL is set.  Fixes bug
+         reported by Bill Gradwohl <bill@ycc.com>
+
+                                   4/7
+                                   ---
+lib/readline/readline.c
+       - _rl_dispatch_subseq: make the `keyseq-timeout' variable apply to
+         ESC processing when in vi mode.  After hitting ESC, readline will
+         wait up to _rl_keyseq_timeout*1000 microseconds (if set) for
+         additional input before dispatching on the ESC and switching to
+         command/movement mode.  Completes timeout work suggested by
+         <rogerx.oss@gmail.com>; this prompted by report from Barry Downes
+         <barry.downes@gmail.com>
+
+lib/sh/shmbchar.c
+       - sh_mbsnlen: new function, returns the number of (possibly multibyte)
+         characters in a passed string with a passed length, examining at most
+         maxlen (third argument) bytes
+
+externs.h
+       - sh_mbsnlen: extern declaration for new function
+
+shell.c
+       - exit_shell: call maybe_save_shell_history if remember_on_history is
+         set, not just in interactive shells.  That means the history is
+         saved if history is enabled, regardless of whether or not the shell
+         is interactive
+
+doc/{bash.1,bashref.texi}
+       - TMOUT: fix description to make it explicit that TMOUT is the timeout
+         period for a complete line of input, not just any input.  Fixes
+         problem reported in Ubuntu bug 957303:
+         https://bugs.launchpad.net/ubuntu/+source/bash/+bug/957303
+       - HISTFILE: document change to write history list to history file in
+         any shell with history enabled, not just interactive shells.  This
+         seems to be more logical behavior.  Suggested by Greg Wooledge
+         <wooledg@eeg.ccf.org>
+
+                                  4/12
+                                  ----
+lib/readline/colors.h
+       - only include stdbool.h if HAVE_STDBOOL_H is defined
+       - if HAVE_STDBOOL_H is not defined, provide enough definition for the
+         library to use `bool', `true', and `false'
+
+lib/readline/parse-colors.[ch]
+       - don't try to include <stdbool.h> at all; rely on colors.h to do it
+
+lib/sh/snprintf.c
+       - vsnprintf_internal: only treat '0' as a flag to indicate zero padding
+         if `.' hasn't been encountered ((flags&PF_DOT) == 0); otherwise treat
+         it as the first digit of a precision specifier.  Fixes bug reported
+         by Petr Sumbera <petr.sumbera@sun.com>
+
+                                  4/15
+                                  ----
+lib/sh/snprintf.c
+       - vsnprintf_internal: if the '0' and '-' flags both occur, the '0'
+         flag is ignored -- Posix.  Start of a series of fixes based on
+         tests and patches from Petr Sumbera <petr.sumbera@sun.com>
+       - PUT_PLUS: make sure PF_PLUS flag is specified before putting the `+'
+       - vsnprintf_internal: when '+' is read as a flag, don't set right-
+         justify flag if the LADJUST (`-') flag has already been supplied
+       - floating: make sure to output space padding before the `+', zero
+         padding after
+       - exponent: make sure to output space padding before the `+', zero
+         padding after
+       - exponent: only subtract one from the width for the decimal point
+         if we're really going to print one
+       - floating: use presence of PF_PLUS flag to decide whether to account
+         for the `+' in the padded field width.  Ditto for exponent()
+
+                                  4/16
+                                  ----
+lib/sh/snprintf.c
+       - vsnprint_internal: only reduce precision by 1 when processing the `g'
+         format if it's > 0.  A precision of 0 should stay 0; otherwise it
+         gets set to -1 (NOT_FOUND) and converted to the default
+       - number, lnumber: if an explicit precision is supplied, turn off the
+         zero-padding flag and set the pad character back to space
+       - number, lnumber: only account for a `+' when performing the field
+         width calculation if the coversion is base 10; we don't add a `+'
+         for other bases
+
+                                  4/18
+                                  ----
+tests/printf3.sub
+       - try using "perl -e 'print time'" to get the current time in seconds
+         since the epoch if "date +%s" is not available (solaris 8-10)
+
+                                  4/19
+                                  ----
+tests/run-printf
+       - use cat -v instead of relying on diff -a being available to convert
+         control characters to ascii and avoid the dreaded "Binary files
+         /tmp/xx and printf.right differ"
+
+                                  4/20
+                                  ----
+lib/sh/strftime.c
+       - incoporated new version from Aharon Robbins <arnold@skeeve.com>
+
+                                  4/22
+                                  ----
+doc/{bash.1,bashref.texi}
+       - slight change to the description of /dev/tcp and /dev/udp
+
+subst.c
+       - match_wpattern: logic fix to the calculation of `simple' (was |=,
+         needs to be &=).  Bug report from Mike Frysinger <vapier@gentoo.org>,
+         fix from Andreas Schwab <schwab@linux-m68k.org>
+
+bashline.c
+       - bash_filename_stat_hook: add code from bash_directory_completion_hook
+         that performs pathname canonicalization in the same way that cd and
+         other builtins will do
+
+                                  4/25
+                                  ----
+execute_cmd.c
+       - execute_pipeline: change the call to move_to_high_fd to make it use
+         getdtablesize() and to not stomp on existing open file descriptors,
+         like the fd the shell is using to read a script.  Bug report from
+         Greg Wooledge <wooledg@eeg.ccf.org>
+
+                                   5/6
+                                   ---
+subst.c
+       - expand_word_internal: case '$': after calling param_expand and
+         setting had_quoted_null, set TEMP to null.  The code that builds the
+         returned string at the end of the function will take care of making
+         and returning a quoted null string if there's nothing else in
+         ISTRING.  If there is, the quoted null should just go away.  Part of
+         fix for bug reported by Ruediger Kuhlmann <RKuhlmann@orga-systems.com>
+       - expand_word_internal: when processing ISTRING to build return value,
+         only set W_HASQUOTEDNULL in the returned word flags if the word is
+         a quoted null string AND had_quoted_null is set.  Rest of fix
+
+                                   5/9
+                                   ---
+variables.c
+       - bind_variable_internal: if we get an array variable here (implicit
+         assignment to index 0), call make_array_variable_value, which
+         dummies up a fake SHELL_VAR * from array[0].  This matters when
+         we're appending and have to use the current value
+       - bind_variable_internal: after computing the new value, treat assoc
+         variables with higher precedence than simple array variables; it
+         might be that a variable has both attributes set
+
+arrayfunc.c
+       - bind_array_var_internal: break code out that handles creating the
+         new value to be assigned to an array variable index into a new
+         function, make_array_variable_value.  This handles creating a
+         dummy SHELL_VAR * for implicit array[0] assignment.  Fixes bug
+         reported by Dan Douglas <ormaaj@gmail.com>
+
+arrayfunc.h
+       - make_array_variable_value: new extern declaration
+
+                                  5/19
+                                  ----
+variables.c
+       - bind_int_variable: if an assignment statement like x=y comes in
+         from the expression evaluator, and x is an array, handle it like
+         x[0]=y.  Fixes bug reported by Dan Douglas <ormaaj@gmail.com>
+
+                                  5/24
+                                  ----
+
+braces.c
+       - mkseq: handle possible overflow and break the sequence generating
+         loop if it occurs.  Fixes OpenSUSE bug 763591:
+         https://bugzilla.novell.com/show_bug.cgi?id=763591
+
+                                  5/25
+                                  ----
+Makefile.in
+       - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools
+         buildversion, mksignames, mksyntax
+       - LDFLAGS_FOR_BUILD: add to compilation recipes for test tools
+         recho, zecho, printenv, xcase
+
+builtins/Makefile.in
+       - LDFLAGS_FOR_BUILD: add to compilation recipes for build tools
+         gen-helpfiles, psize.aux
+
+variables.c
+       - bind_int_variable: if LHS is a simple variable name without an array
+         reference, but resolves to an array variable, call
+         bind_array_variable with index 0 to make x=1 equivalent to x[0]=1.
+         Fixes bug reported by Dan Douglas <ormaaj@gmail.com>
+
+                                  5/27
+                                  ----
+subst.c
+       - expand_word_internal: make sure has_dollar_at doesn't get reset before
+         recursive calls to param_expand or expand_word_internal, since it has
+         to save state of what came before.  Use temp variable and make sure
+         has_dollar_at is incremented if recursive call processes "$@".
+         Fixes bug reported by gregrwm <backuppc-users@whitleymott.net> and
+         supplemented by Dan Douglas <ormaaj@gmail.com>
+
+doc/{bash.1,bashref.texi}
+       - changes to the description of substring expansion inspired by
+         suggestions from Bill Gradwohl <bill@ycc.com>
+
+doc/bashref.texi
+       - added substring expansion examples inspired by suggestions from
+         Bill Gradwohl <bill@ycc.com>
+
+variables.c
+       - find_shell_variable: search for a variable in the list of shell
+         contexts, ignore the temporary environment
+       - find_variable_tempenv: search for a variable in the list of shell
+         contexts, force search of the temporary environment
+       - find_variable_notempenv: search for a variable in the list of shell
+         contexts, don't force search of the temporary environment
+
+variables.h
+       - find_shell_variable: extern declaration
+       - find_variable_tempenv: extern declaration
+       - find_variable_notempenv: extern declaration
+
+arrayfunc.c
+       - bind_array_variable: call find_shell_variable instead of calling
+         var_lookup directly
+
+findcmd.c
+       - search_for_command: call find_variable_tempenv instead of
+         find_variable_internal directly
+       - _find_user_command_internal: call find_variable_tempenv instead of
+         find_variable_internal directly
+
+builtins/setattr.def
+       - set_var_attribute: call find_variable_notempenv instead of
+         find_variable_internal directly
+       - show_name_attributes:  call find_variable_tempenv instead of
+         find_variable_internal directly
+
+                                   6/1
+                                   ---
+sig.c
+       - termsig_handler: don't try to save the shell history on a terminating
+         signal any more, since it just causes too many problems on Linux
+         systems using glibc and glibc malloc
+
+lib/readline/vi_mode.c
+       - rl_vi_change_to: change to correctly redo `cc', since `c' is not a vi
+         motion character.  From Red Hat bug 813289
+       - rl_vi_delete_to: change to correctly redo `dd', since `d' is not a vi
+         motion character
+       - rl_vi_yank_to: change to correctly redo `yy', since `y' is not a vi
+         motion character
+
+                                   6/4
+                                   ---
+lib/sh/mktime.c
+       - current versions of VMS do not need to include <stddef.h>.  Fix from
+         John E. Malmberg <wb8tyw@qsl.net>
+
+                                   6/5
+                                   ---
+lib/sh/eaccess.c
+       - sh_stat: instead of using a static buffer to do the DEV_FD_PREFIX
+         translation, use a dynamically-allocated buffer that we keep
+         resizing.  Fixes potential security hole reported by David Leverton
+         <levertond@googlemail.com>
+
+                                   6/5
+                                   ---
+braces.c
+       - expand_seqterm: check errno == ERANGE after calling strtoimax for
+         rhs and incr.  Part of a set of fixes from Scott McMillan
+         <scotty.mcmillan@gmail.com>
+       - expand_seqterm: incr now of type `intmax_t', which changes
+         arguments to mkseq
+       - mkseq: a better fix for detecting overflow and underflow since it's
+         undefined in C and compilers `optimize' out overflow checks.  Uses
+         ADDOVERFLOW and SUBOVERFLOW macros
+       - mkseq: use sh_imaxabs (new macro) instead of abs() for intmax_t
+         variables
+       - mkseq: don't allow incr to be converted to -INTMAX_MIN
+       - mkseq: make sure that strvec_create isn't called with a size argument
+         greater than INT_MAX, since it only takes an int
+
+                                   6/6
+                                   ---
+braces.c
+       - mkseq: try and be smarter about not overallocating elements in
+         the return array if the increment is not 1 or -1
+
+                                   6/7
+                                   ---
+parse.y
+       - history_delimiting_chars: if the parser says we're in the middle of
+         a compound assignment (PST_COMPASSIGN), just return a space to avoid
+         adding a stray semicolon to the history entry.  Fixes bug reported
+         by "Davide Brini" <dave_br@gmx.com>
+
+                                   6/8
+                                   ---
+bashline.c
+       - bash_directory_completion_hook: don't attempt spelling correction
+         on the directory name unless the direxpand option is set and we are
+         going to replace the directory name with the corrected one in the
+         readline line.  Suggested by Linda Walsh <bash@tlinx.org>
+
+lib/sh/shquote.c
+       - sh_backslash_quote: now takes a third argument: flags.  If non-zero,
+         tildes are not backslash-escaped.  Have to handle both printf %q,
+         where they should be escaped, and filename completion, where they
+         should not when used as usernames
+
+externs.h
+       - sh_backslash_quote: declaration now takes a third argument
+
+builtins/printf.def
+       - printf_builtin: call sh_backslash_quote with 1 as third argument
+         so tildes get escaped
+
+{bashline,bracecomp}.c
+       - call sh_backslash_quote with 0 as third argument so tildes are not
+         escaped in completed words
+
+doc/bash.1
+       - add `coproc' to the list of reserved words.  From a report by
+         Jens Schweikhardt <schweikh@schweikhardt.net>
+
+                                  6/10
+                                  ----
+execute_cmd.c
+       - line_number_for_err_trap: now global, so parse_and_execute can save
+         and restore it with unwind-protect
+
+builtins/evalstring.c
+       - parse_prologue: save and restore line_number_for_err_trap along
+         with line_number
+       - restore_lastcom: new function, unwind-protect to restore
+         the_printed_command_except_trap
+       - parse_prologue: use restore_lastcom to save and restore the value
+         of the_printed_command_except_trap around calls to parse_and_execute
+         (eval/source/.)
+
+                                  6/15
+                                  ----
+lib/readline/complete.c
+       - complete_fncmp: change filename comparison code to understand
+         multibyte characters, even when doing case-sensitive or case-mapping
+         comparisons.  Fixes problem reported by Nikolay Shirokovskiy
+         <nshyrokovskiy@gmail.com>
+
+                                  6/20
+                                  ----
+builtins/mapfile.def
+       - mapfile: move the line count increment and check for having read
+         the specified number of lines to the end of the loop to avoid
+         reading an additional line with zgetline.  Fixes bug reported by
+         Dan Douglas <ormaaj@gmail.com>
+
+                                  6/21
+                                  ----
+
+execute_cmd.c
+       - execute_pipeline: make sure `lastpipe_flag' is initialized to 0 on
+         all systems, since it's tested later in the function.  Fixes bug
+         reported by John E. Malmberg <wb8tyw@qsl.net>
+
+                                  6/22
+                                  ----
+mailcheck.c
+       - file_mod_date_changed: return 0 right away if mailstat() does not
+         return success.  Fixes bug with using uninitialized values reported
+         by szymon.kalasz@uj.edu.pl
+
+builtins/set.def
+       - the `monitor' option is not available when the shell is compiled
+         without job control, since the underlying `m' flag is not available
+
+nojobs.c
+       - job_control: now declared as int variable, initialized to 0, never
+         modified
+
+jobs.h
+       - job_control: extern declaration no longer dependent on JOB_CONTROL
+
+execute_cmd.c
+       - execute_pipeline: made necessary changes so `lastpipe' shell option
+         is now available in all shells, even those compiled without
+         JOB_CONTROL defined
+
+                                  6/23
+                                  ----
+lib/glob/glob.c
+       - glob_filename: check for interrupts before returning if glob_vector
+         returns NULL or an error.  Bug reported by Serge van den Boom
+         <svdb@stack.nl>, fix from Andreas Schwab <schwab@linux-m68k.org>
+       - call run_pending_traps after each call to QUIT or test of
+         interrupt_state, like we do in mainline shell code
+       - glob_vector: don't call QUIT; in `if (lose)' code block; just free
+         memory, return NULL, and let callers deal with interrupt_state or
+         other signals and traps
+
+                                  6/25
+                                  ----
+lib/readline/input.c
+       - rl_read_key: restructure the loop that calls the event hook a little,
+         so that the hook is called only after rl_gather_tyi returns no input,
+         and any pending input is returned first.  This results in better
+         efficiency for processing pending input without calling the hook
+         on every input character as bash-4.1 did.  From a report from
+         Max Horn <max@quendi.de>
+
+                                  6/26
+                                  ----
+trap.c
+       - signal_is_pending: return TRUE if SIG argument has been received and
+         a trap is waiting to execute
+
+trap.h
+       - signal_is_pending: extern declaration
+
+lib/glob/glob.c
+       - glob_vector: check for pending SIGINT trap each time through the loop,
+         just like we check for interrupt_state or terminating_signal, and
+         set `lose = 1' so we clean up after ourselves and interrupt the
+         operation before running the trap.  This may require a change later,
+         maybe call run_pending_traps and do that if run_pending_traps returns?
+
+variables.c
+       - sv_histtimefmt: set history_comment_character to default (`#') if
+         it's 0 when we're turning on history timestamps.  The history code
+         uses the history comment character to prefix timestamps, and
+         leaving it at 0 effectively removes them from the history.  From a
+         report to help-bash by Dennis Williamson <dennistwilliamson@gmail.com>
+
+                                  6/27
+                                  ----
+lib/readline/signals.c
+       - rl_maybe_restore_sighandler: new function, sets handler for SIG to
+         HANDLER->sa_handler only if it's not SIG_IGN.  Needs to be called
+         on same signals set using rl_maybe_set_sighandler, which does not
+         override an existing SIG_IGN handler (SIGALRM is ok since it does
+         the check inline; doesn't mess with SIGWINCH)
+
+                                  6/30
+                                  ----
+variables.h
+       - additional defines for the new `nameref' variable attribute
+         (att_nameref): nameref_p, nameref_cell, var_setref
+
+variables.c
+       - find_variable_nameref: resolve SHELL_VAR V through chain of namerefs
+       - find_variable_last_nameref: resolve variable NAME until last in a
+         chain of possibly more than one nameref starting at shell_variables
+       - find_global_variable_last_nameref: resolve variable NAME until last
+         in a chain of possibly more than one nameref starting at
+         global_variables
+       - find_nameref_at_context: resolve SHELL_VAR V through chain of namerefs        
+         in a specific variable context (usually a local variable hash table)
+       - find_variable_nameref_context: resolve SHELL_VAR V through chain of
+         namerefs following a chain of varible contexts
+       - find_variable_last_nameref_context: resolve SHELL_VAR V as in
+         find_variable_last_context, but return the final nameref instead of
+         what the final nameref resolves to
+       - find_variable_tempenv, find_variable_notempenv, find_global_variable,
+         find_shell_variable, find_variable: modified to follow namerefs
+       - find_global_variable_noref: look up a global variable without following
+         any namerefs
+       - find_variable_noref: look up a shell variable without following any
+         namerefs
+       - bind_variable_internal: modify to follow a chain of namerefs in the
+         global variables table; change to handle assignments to a nameref by
+         following nameref chain
+       - bind_variable: modify to follow chain of namerefs when binding to a
+         local variable
+       - unbind_variable: changes to unset nameref variables (unsets both
+         nameref and variable it resolves to)
+
+subst.c
+       - parameter_brace_expand_word: change to handle expanding nameref whose
+         value is x[n]
+       - parameter_brace_expand_indir: change to expand in ksh93-compatible
+         way if variable to be indirected is nameref and a simple (non-array)
+         expansion
+       - param_expand: change to expand $foo where foo is a nameref whose value
+         is x[n]
+
+execute_cmd.c
+       - execute_for_command: changes to implement ksh93 semantics when index
+         variable is a nameref
+
+builtins/setattr.def
+       - show_var_attributes: change to add `n' to flags list if att_nameref
+         is set
+
+builtins/set.def
+       - unset_builtin: changes to error messages to follow nameref variables
+
+builtins/declare.def
+       - document new -n option
+       - declare_internal: new `-n' and `+n' options
+       - declare_internal: handle declare -n var[=value] and
+         declare +n var[=value] for existing and non-existant variables.
+         Enforce restriction that nameref variables cannot be arrays.
+         Implement semi-peculiar ksh93 semantics for typeset +n ref=value
+
+                                   7/5
+                                   ---
+variables.c
+       - unbind_variable: unset whatever a nameref resolves to, leaving the
+         nameref variable itself alone
+       - unbind_nameref: new function, unsets a nameref variable, not the
+         variable it references
+
+variables.h
+       - unbind_nameref: extern declaration
+
+builtins/set.def
+       - unset_builtin: modify to add -n option, which calls unbind_nameref
+         leaving unbind_variable for the usual case.  This required slight
+         changes and additions to the test suite
+
+doc/{bash.1,bashref.texi}
+       - document namerefs and typeset/declare/local/unset -n
+
+                                  7/13
+                                  ----
+lib/sh/casemod.c
+       - include shmbchar.h for is_basic and supporting pieces
+       - sh_casemod: use _to_wupper and _to_wlower to convert wide character
+         case instead of TOUPPER and TOLOWER.  Fixes bug reported by
+         Dennis Williamson <dennistwilliamson@gmail.com>, fix from
+         Andreas Schwab <schwab@linux-m68k.org>
+       - cval: short-circuit and return ascii value if is_basic tests true
+       - sh_casemod: short-circuit and use non-multibyte case modification
+         and toggling code if is_basic tests true
+
+lib/readline/signals.c
+       - _rl_{block,release}_sigint: remove the code that actually blocks and
+         releases the signals, since we defer signal handling until calls to
+         RL_CHECK_SIGNALS()
+
+lib/readline/{callback,readline,util}.c
+       - if HAVE_POSIX_SIGSETJMP is defined, use sigsetjmp/siglongjmp without
+         saving and restoring the signal mask instead of setjmp/longjmp
+
+lib/readline/rltty.c
+       - prepare_terminal_settings: don't mess with IXOFF setting if
+         USE_XON_XOFF defined
+
+doc/{bash.1,bashref.texi}
+       - add some text to the description of set -e clarifying its effect
+         on shell functions and shell function execution.  Suggested by
+         Rainer Blome <rainer.blome@gmx.de>
+
+bashline.c
+       - edit_and_execute_command: increment current_command_line_count before
+         adding partial line to command history (for command-oriented-history
+         because of rl_newline at beginning of function), then reset it to 0
+         before adding the dummy history entry to make sure the dummy entry
+         doesn't get added to previous incomplete command.  Partial fix for
+         problem reported by Peng Yu <pengyu.ut@gmail.com>
+
+                                  7/24
+                                  ----
+configure.in
+       - interix: define RECYCLES_PIDS.  Based on a report from Michael
+         Haubenwallner <michael.haubenwallner@salomon.at>
+
+                                  7/26
+                                  ----
+jobs.c
+       - make_child: call bgp_delete on the newly-created pid unconditionally.
+         Some systems reuse pids before cycling through an entire set of
+         CHILD_MAX/_SC_CHILD_MAX unique pids.  This is no longer dependent
+         on RECYCLES_PIDS.  Based on a report from Michael Haubenwallner
+         <michael.haubenwallner@salomon.at>
+
+support/shobj-conf
+       - Mac OS X: drop MACOSX_DEPLOYMENT_TARGET=10.3 from the LDFLAGS. We
+         can finally kill Panther
+
+                                  7/28
+                                  ----
+subst.c
+       - command_substitute: make sure last_made_pid gets reset if make_child
+         fails
+
+execute_cmd.c
+       - execute_command_internal: case cm_simple: decide whether or not to
+         wait_for a child if already_making_children is non-zero, indicates
+         that there is an unwaited-for child.  More of fix for bug report
+         from Michael Haubenwallner <michael.haubenwallner@salomon.at>
+
+jobs.c
+       - make_child: call delete_old_job (new_pid) unconditionally, don't
+         bother to check whether or not pid wrap occurred.  Rest of fix for
+         bug report from Michael Haubenwallner
+         <michael.haubenwallner@salomon.at>
+
+                                  7/29
+                                  ----
+shell.c
+       - subshell_exit: new function, exits the shell (via call to sh_exit())
+         after calling any defined exit trap
+
+externs.h
+       - subshell_exit: new extern declaration
+
+execute_cmd.c
+       - execute_command_internal: make sure to call subshell_exit for
+         {} group commands executed asynchronously (&).  Part of fix for
+         EXIT trap bug reported by Maarten Billemont <lhunath@lyndir.com>
+
+sig.c
+       - reset_terminating_signals: make sure to set termsigs_initialized back
+         to 0, so a subsequent call to initialize_terminating_signals works
+         right.  Rest of fix for bug reported by Maarten Billemont
+         <lhunath@lyndir.com>
+
+{execute_cmd,general,jobs,mailcheck,mksyntax,test}.c
+builtins/{cd,fc,pushd,ulimit}.def
+lib/malloc/getpagesize.h
+lib/sh/{clktck,fpurge,inet_aton,mailstat,oslib,pathcanon,pathphys,spell,strerror}.c
+       - make inclusion of <sys/param.h> dependent on HAVE_SYS_PARAM_H
+         consistently
+
+                                   8/6
+                                   ---
+lib/readline/histexpand.c
+       - history_expand_internal: now takes an additional argument saying
+         whether the history expansion occurs within a quoted string, set to
+         the open quote character
+       - history_expand_internal: use new argument instead of checking prev
+         char and initializing quoted_search_delimiter, pass qc directly to
+         get_history_event, where it allows a matching quote to terminate a
+         string defining an event
+       - history_expand: change single-quote handling code so that if
+         history_quotes_inhibit_expansion is 0, single quotes are treated
+         like double quotes
+       - history_expand: change call to history_expand_internal to pass new
+         argument of `"' if double-quoted string, `'' if single-quoted string;
+         this lets history_expand decide what is a quoted string and what
+         is not
+
+                                   8/7
+                                   ---
+configure.in
+       - AC_CANONICAL_BUILD: invoke for later use
+
+lib/readline/macro.c
+       - _rl_prev_macro_key: new function, inverse of _rl_next_macro_key:
+         backs up the index into the current macro by 1
+
+lib/readline/rlprivate.h
+       - _rl_prev_macro_key: extern declaration
+
+
+lib/readline/readline.c
+       - _rl_dispatch_subseq, _rl_subseq_result: don't call _rl_unget_char
+         if we're currently reading from a macro; call _rl_prev_macro_key
+         instead.  Fixes bug reported by Clark Wang <clark.wang@oracle.com>
+
+                                  8/13
+                                  ----
+builtins/evalstring.c
+       - evalstring(): new function, wrapper around parse_and_execute.
+         make sure we handle cases where parse_and_execute can call `return'
+         and short-circuit without cleaning up properly.  We call
+         parse_and_execute_cleanup() then jump to the previous-saved return
+         location
+
+builtins/common.h
+       - extern declaration for evalstring()
+
+builtins/eval.def
+       - eval_builtin: make sure we handle `eval " ... return"' in contexts
+         where `return' is valid by calling evalstring().  Fixes bug with
+         `eval return' in sourced files reported by Clark Wang
+         <dearvoid@gmail.com>
+
+trap.c
+       - run_pending_traps: call evalstring instead of parse_and_execute.
+         XXX - still needs to handle saving and restoring token state in the
+         presence of `return'; could use unwind_protects for that
+
+builtins/mapfile.def
+       - run_callback: call evalstring instead of parse_and_execute
+
+                                  8/15
+                                  ----
+bashline.c
+       - bash_filename_stat_hook: make sure we don't free local_dirname
+         before using it to canonicalize any expanded filename.  Make sure
+         it always points to *dirname and only free it if we're replacing
+         it.
+
+lib/readline/complete.c
+       - append_to_match: make sure we call rl_filename_stat_hook with
+         newly-allocated memory to avoid problems with freeing it twice
+
+                                  8/17
+                                  ----
+variables.c,config-top.h
+       - if ARRAY_EXPORT is defined to 1 when variables.c is compiled, the
+         code that allows indexed arrays to be exported is enabled and
+         included
+
+                                  8/19
+                                  ----
+shell.c
+       - call start_debugger from main() only if dollar_vars[1] != 0 (close
+         enough to a non-interactive shell, since we can be interactive with
+         -i while running a shell script).  Fixes oddity reported by
+         Techlive Zheng <techlivezheng@gmail.com>
+
+                                  8/20
+                                  ----
+arrayfunc.c
+       - quote_array_assignment_chars: don't bother quoting if the word has
+         not been marked as an assignment (W_ASSIGNMENT)
+       - quote_array_assignment_chars: turn on W_NOGLOB in the word flags
+         so assignment statements don't undergo globbing.  Partial fix for
+         problems reported by Dan Douglas <ormaaj@gmail.com>
+
+                                  8/21
+                                  ----
+command.h
+       - W_NOBRACE: new word flag that means to inhibit brace expansion
+
+subst.c
+       - brace_expand_word_list: suppress brace expansion for words with
+         W_NOBRACE flag
+
+                                  8/22
+                                  ----
+builtins/read.def
+       - read_builtin: don't call dequote_string on what we've read, even if
+         we saw an escape character, unless (input_string && *input_string).
+         We may have escaped an IFS whitespace character.  Fixes seg fault
+         reported by <armandsl@gmail.com>
+
+execute_cmd.c
+       - execute_command_internal: set the_printed_command_except trap when
+         about to execute a ( ... ) user subshell.  For now, set it only if
+         ERR is trapped; can relax that later.  Fixes bug reported by
+         Mike Frysinger <vapier@gentoo.org>
+
+                                  8/23
+                                  ----
+jobs.c
+       - remove references to first_pid and pid_wrap, since we're not using
+         them for anything anymore
+
+                                  8/24
+                                  ----
+subst.c
+       - changes for W_NOBRACE everywhere appropriate: so it can be displayed
+         for debugging, and passed out of expand_word_internal
+
+doc/{bash.1,bashref.texi}
+       - small changes to make it clearer that the = and == operators are
+         equivalent, and will cause pattern matching when used with [[.
+         From a question from Michal Soltys <soltys@ziu.info>
+
+doc/bashref.texi
+       - some small formatting changes from Karl Berry <karl@freefriends.org>
+
+                                  8/27
+                                  ----
+lib/readline/doc/{history,rlman,rluserman}.texi
+       - some small formatting changes from Karl Berry <karl@freefriends.org>
+
+arrayfunc.c
+       - assign_array_element_internal, assign_compound_array_list,
+         unbind_array_element, array_value_internal: changes to make
+         assignment statements to negative indices (a[-1]=2) and unsetting
+         array elements using negative indices (unset 'a[-1]') work.
+         From suggestions by Dennis Williamson <dennistwilliamson@gmail.com>
+         and Chris F. A. Johnson <chris@cfajohnson.com>
+
+subst.c
+       - array_length_reference: changes to make length references to array
+         elements using negative indices (${#a[-1]}) work
+
+                                  8/28
+                                  ----
+doc/{bash.1,bashref.texi}
+       - document new treatment of negative indices to indexed arrays when
+         assigning, referencing, calculating length, and unsetting
+
+                                  8/29
+                                  ----
+shell.c
+       - show_shell_usage: add -l to list of shell invocation options (short
+         for --login).  From Red Hat bug 852469
+
+configure.ac
+       - renamed from configure.in, as latest autoconf versions want.  Patches
+         Stefano Lattarini <stefano.lattarini@gmail.com>
+
+MANIFEST,Makefile.in,doc/bashref.texi,support/mkconffiles
+       - configure.in -> configure.ac
+
+                                   9/1
+                                   ---
+
+parse.y
+       - read_token_word: allow words like {array[ind]} to be valid redirection
+         words for constructs like {x}<file
+
+redir.c
+       - redir_varassign: bind_var_to_int already handles array assignments,
+         so don't need to do anything more for things like {a[i]}<file
+       - redir_varvalue: changes to allow references to {a[i]} when
+         performing redirections using valid_array_reference and
+         get_array_value.  Adds functionality requested most recently by
+         <unknown@vmw-les.eng.vmware.com>
+
+lib/readline/display.c
+       - update_line: if the first difference between the old and new lines
+         is completely before any invisible characters in the prompt, we
+         should not adjust _rl_last_c_pos, since it's before any invisible
+         characters.  Fixed in two places
+       - prompt_modechar: return a character indicating the editing mode:
+         emacs (@), vi command (:), or vi insert (+)
+       - _rl_reset_prompt: new function, just calls rl_expand_prompt.  Will be
+         inlined, placeholder for more changes
+       - expand_prompt: if show-mode-in-prompt is enabled, add a character to
+         the front of the prompt indicating the editing mode, adjusting the
+         various variables as appropriate to keep track of the number of
+         visible characters and number of screen positions
+
+lib/readline/bind.c
+       - show-mode-in-prompt: new bindable boolean variable, shadowed by
+         _rl_show_mode_in_prompt variable
+       - hack_special_boolean_var: call _rl_reset_prompt when toggling or
+         setting show-mode-in-prompt
+
+lib/readline/readline.c
+       - readline_internal_setup: make sure the correct vi mode keymap is set
+         before expanding the prompt string for the first time
+
+lib/readline/misc.c
+       - rl_emacs_editing_mode: make sure to call _rl_reset_prompt if we're
+         showing the editing mode in the prompt
+
+lib/readline/rlprivate.h
+       - _rl_reset_prompt, _rl_show_mode_in_prompt: extern declarations
+
+lib/readline/vi_mode.c
+       - rl_vi_insertion_mode: call _rl_reset_prompt
+       - rl_vi_movement_mode: call _rl_reset_prompt.  Finishes changes for
+         showing mode in prompt string, originally requested by Miroslav
+         Koskar <mkoskar@gmail.com> and most recently by Jordan Michael
+         Ziegler <jziegler@bnl.gov>
+
+doc/bash.1,lib/readline/doc/{readline.3,rluser.texi}
+       - document new show-mode-in-prompt variable, off by default
+
+                                   9/3
+                                   ---
+
+jobs.c
+       - set_childmax: new function, external mechanism for other parts of
+         the shell to set js.c_childmax, the number of saved exited child
+         statuses to remember
+jobs.h
+       - set_childmax: extern declaration
+
+variables.c
+       - CHILD_MAX: new special variable, with sv_childmax function to
+         run when it changes.  Setting CHILD_MAX to a value greater than
+         zero but less than some maximum (currently 8192) sets the number of
+         exited child statuses to remember.  set_childmax (jobs.c) ensures
+         that the number does not drop below the posix-mandated minimum
+         (CHILD_MAX)
+
+doc/{bash.1,bashref.texi}
+       - CHILD_MAX: document new meaning and action when variable is set
+
+                                   9/5
+                                   ---
+redir.c
+       - redir_varassign: call stupidly_hack_special_variables after
+         assigning fd number to specified variable, so we can use constructs
+         like {BASH_XTRACEFD}>foo.  Suggested by Pierre Gaston
+         <pierre.gaston@gmail.com>
+
+                                   9/8
+                                   ---
+expr.c
+       - readtok: invalidate previous contents of `curlval' before freeing
+         and reallocating tokstr (which, chances are, will get the same
+         pointer as before and render curlval inconsistent).  Fixes other
+         bug reported by Dan Douglas <ormaaj@gmail.com>
+
+                                   9/9
+                                   ---
+lib/readline/complete.c
+       - rl_username_completion_function: protect call to setpwent() with
+         #ifdef (HAVE_GETPWENT)/#endif.  Fixes bug reported by
+         Gerd Hofmann <gerd.hofmann.nbg@googlemail.com>
+
+lib/readline/display.c
+       - rl_message: second and subsequent calls to rl_message can result in
+         local_prompt being overwritten with new values (e.g., from the
+         successive calls displaying the incremental search string).  Need
+         to free before overwriting if it's not the same as the value saved
+         in saved_local_prompt.  Fixes memory leak reported by
+         Wouter Vermaelen <vermaelen.wouter@gmail.com>
+
+lib/readline/{terminal.c,rlprivate.h}
+       - move CUSTOM_REDISPLAY_FUNC and CUSTOM_INPUT_FUNC defines from
+         terminal.c to rlprivate.h so other files can use them
+
+expr.c
+       - expr_streval: if noeval is non-zero, just return 0 right away,
+         short-circuiting evaluation completely.  readtok will leave curtok
+         set correctly without re-entering the evaluator at all.  Rest of
+         fix for bug reported by Dan Douglas <ormaaj@gmail.com>
+
+                                  9/11
+                                  ----
+
+parse.y
+       - parse_comsub: make sure the `reserved word ok in this context' flag
+         is preserved after we read `do' followed by whitespace.  Fixes bug
+         reported by Benoit Vaugon <benoit.vaugon@gmail.com>
+
+                                  9/13
+                                  ----
+configure.ac,config.h.in
+       - enable-direxpand-default: new configure option, turns the `direxpand'
+         shell option on by default
+
+bashline.c
+       - dircomplete_expand, dircomplete_expand_relpath: initialize to 1 if
+         DIRCOMPLETE_EXPAND_DEFAULT is defined and non-zero
+
+doc/bashref.texi
+       - enable-direxpand-default: document new configure option
+
+                                  9/14
+                                  ----
+shell.c
+       - --protected: make option valid only when wordexp is compiled into
+         the shell.  Fix from Roman Rakus <rrakus@redhat.com>
+
+configure.ac
+       - HP NonStop (*-nsk*): compile --without-bash-malloc. Change from
+         Joachim Schmitz <jojo@schmitz-digital.de>
+
+                                  9/16
+                                  ----
+subst.c,execute_cmd.c,lib/glob/sm_loop.c,lib/sh/shquote.c
+       - minor code cleanups from Joachim Schmitz <jojo@schmitz-digital.de>
+
+lib/readline/colors.h
+       - workaround for HP NonStop compiler issue with <stdbool.h> from
+         Joachim Schmitz <jojo@schmitz-digital.de>
+
+                                  9/17
+                                  ----
+builtins/printf.def
+       - printf_builtin: handle localtime returning NULL, as can happen when
+         encountering overflow.  Bug report and initial fix from
+         Eduardo A. Bustamante López <dualbus@gmail.com>
+
+doc/{bash.1,bashref.texi}
+       - emphasize that brace expansion using character ranges ({a..c}) acts
+         as if the C locale were in use.  Prompted by message from
+         Marcel Giannelia <info@skeena.net>
+
+                                  9/20
+                                  ----
+lib/sh/wcsnwidth.c
+       - wcsnwidth: new function, variant of wcwidth, returns the number of
+         wide characters from a string that will be displayed to not exceed
+         a specified max column position
+
+                                  9/21
+                                  ----
+builtins/help.def
+       - show_builtin_command_help: break code that displays the short-doc
+         for each builtin in two columns into a new function: dispcolumn
+       - wdispcolumn: multibyte-char version of dispcolumn; uses wide
+         chars and printf "%ls" format.  Fixes problem reported by
+         Nguyá»n Thái Ngá»c Duy <pclouds@gmail.com>
+
+                                  9/22
+                                  ----
+execute_cmd.c
+       - execute_disk_command: before running the command-not-found hook,
+         call kill_current_pipeline() to make sure we don't add processes
+         to an existing pipeline or wait for processes erroneously
+
+                                  9/23
+                                  ----
+lib/readline/input.c
+       - rl_input_available_hook: new hook function, called from
+         _rl_input_available (or _rl_input_queued) to return whether or not
+         input is available wherever the input source is
+
+lib/readline/doc/rltech.texi
+       - rl_input_available_hook: document
+
+                                  9/27
+                                  ----
+lib/glob/sm_loop.c:
+       - GMATCH: after one or more `*', an instance of ?(x) can match zero or
+         1 times (unlike ?, which has to match one character).  The old code
+         failed if it didn't match at least once.  Fixes `a*?(x)' bug.
+       - GMATCH: if we hit the end of the search string, but not the end of
+         the pattern, and the rest of the pattern is something that can
+         match the NUL at the end of the search string, we should successfully
+         match.  Fixes `a*!(x)' bug reported by <hans1worst@gmail.com>
+
+                                  10/2
+                                  ----
+command.h
+       - add c_lock member to coproc structure for future use to tell who is
+         manipulating it
+
+execute_cmd.c
+       - execute_coproc: block SIGCHLD while parent is forking coproc
+         process and adding pid to sh_coproc struct to avoid race condition
+         where child is reaped before the pid is assigned and the coproc is
+         never marked as having died.  Fixes race condition identified by
+         Davide Baldini <baldiniebaldini@gmail.com>
+       - add assignments to c_lock member of struct coproc in various
+         functions that manipulate it; was used to identify race condition
+       - coproc_pidchk: don't call coproc_dispose to avoid using malloc and
+         other functions in a signal handler context
+       - coproc_dispose: call BLOCK_SIGNAL/UNBLOCK_SIGNAL for SIGCHLD while
+         manipulating the sh_coproc struct
+
+                                  10/6
+                                  ----
+lib/readline/complete.c
+       - rl_display_match_list: if printing completions horizontally, don't
+         bother with spacing calculations if limit == 1, which means we are
+         printing one completion per line no matter what.  Fixes bug
+         reported by David Kaasen <kaasen@nvg.ntnu.no>
+
+                                  10/7
+                                  ----
+builtins/declare.def
+       - declare_internal: add error checking for nameref attribute and
+         variable assignments: self-references, attempts to make an array
+         variable a nameref
+
+subst.c
+       - parameter_brace_expand: handle parameter_brace_expand_word returning
+         &expand_param_fatal or &expand_param_error and return the appropriate
+         error value
+       - parameter_brace_expand_word: if a nameref variable's value is not a
+         valid identifier, return an error
+       - param_expand: if a nameref variable's value is not a valid identifier,
+         return an error
+
+test.c
+       - unary_operator: add new -R variable, returns true if variable is set
+         and has the nameref attribute. From ksh93
+
+builtins/test.def
+       - add -R to description of conditional commands for help test
+
+doc/{bash.1,bashref.texi}
+       - document new -R unary conditional operator
+
+                                  10/13
+                                  -----
+trap.c
+       - check_signals_and_traps: new function, convenience function for the
+         rest of the shell to check for pending terminating and interrupt
+         signals, and to check for and process any pending traps
+       - any_signals_trapped: new function, returns non-zero if any signals
+         are trapped and -1 if not
+
+trap.h
+       - extern declaration for check_signals_and_traps
+
+bashline.c
+       - bashline_reset: make sure we reset the event hook
+       - bash_event_hook: call check_signals_and_traps instead of just
+         checking for terminating signals so we can run pending traps and
+         react to interrupts, and reset the event hook when we're done
+
+
+                                  10/14
+                                  -----
+trap.c
+       - trap_handler: if executing in a readline signal handler context,
+         call bashline_set_event_hook to install bash_event_hook to process
+         the signal (if bash cares about it)
+
+sig.c
+       - sigint_sighandler: call bashline_set_event_hook to set the event
+         hook if we're executing in a readline signal handler context
+
+lib/readline/input.c
+       - rl_getc: call RL_CHECK_SIGNALS if read returns -1/EINTR and the caught
+         signal is SIGINT or SIGQUIT rather than waiting until the next time
+         around the loop
+       - rl_getc: call rl_event_hook after calling RL_CHECK_SIGNALS to allow
+         an application signal handler to set the event hook in its own
+         signal handler (e.g., like bash trap_handler or sigint_sighandler)
+
+
+parse.y
+       - yy_readline_get: don't set interrupt_immediately before we call
+         readline().  Inspired by report from lanshun zhou
+         <zls.sogou@gmail.com>
+
+input.c
+       - getc_with_restart: add call to run_pending_traps after call to
+         CHECK_TERMSIG
+
+lib/sh/zread.c
+       - zread: call check_signals_and_traps if read() returns -1/EINTR
+         instead of just ignoring the EINTR and deferring handling any
+         signal that generated it
+
+builtins/mapfile.def
+       - mapfile: don't set interrupt_immediately before calling zgetline()
+         (which uses zread internally)
+
+builtins/read.def
+       - read_builtin: don't set interrupt_immediately before calling zread
+         (moved code around so that it was only being set right around calls
+         to zread to avoid signal handler conflicts).  Inspired by report
+         from lanshun zhou <zls.sogou@gmail.com>
+       - edit_line: don't set interrupt_immediately around call to readline()
+       - include shmbutil.h
+       - read_builtin: don't call read_mbchar unless is_basic(c) returns
+         false for the character we just read
+
+                                  10/15
+                                  -----
+sig.c
+       - throw_to_top_level: if interrupt_state is non-zero, make sure that
+         last_command_exit_value reflects 128+SIGINT if it's not already
+         greater than 128
+
+                                  10/20
+                                  -----
+builtins/wait.def
+       - WAIT_RETURN: set wait_signal_received back to 0 for the potential
+         next call to wait
+
+quit.h
+       - CHECK_WAIT_INTR: macro to check whether trap_handler handled a
+         signal and set wait_signal_received; longjmp to wait_intr_buf in
+         that case
+
+jobs.c
+       - wait_for, waitchld: call CHECK_WAIT_INTR at the same places we call
+         CHECK_TERMSIG to check for terminating signals
+       - wait_sigint_handler: don't longjmp out of the wait builtin unless
+         interrupt_immediately is set; otherwise just SIGRETURN from the
+         handler
+       - wait_sigint_handler: if interrupt_immediately not set, but we are
+         executing in the wait builtin and SIGINT is not trapped, treat it
+         as a `normally received' SIGINT: restore the signal handler and
+         send SIGINT to ourselves
+       - waitchld: when in posix mode and running SIGCHLD traps, don't longjmp
+         to wait_intr_buf (and let wait be interrupted) if we're running from
+         a signal handler.  Wait for CHECK_WAIT_INTR to do the longjmp.
+         run_pending_traps will run the SIGCHLD trap later
+
+nojobs.c
+       - reap_zombie_children, wait_for_single_pid, wait_for: call
+         CHECK_WAIT_INTR where we call CHECK_TERMSIG
+       - wait_sigint_handler: don't longjmp out of the wait builtin unless
+         interrupt_immediately is set; otherwise just SIGRETURN from the
+         handler
+
+trap.c
+       - trap_handler: make sure wait_signal_received is set if the wait
+         builtin is executing, and only longjmp if interrupt_immediately is
+         set.  This whole set of fixes was prompted by report from
+         lanshun zhou <zls.sogou@gmail.com>
+
+                                  10/24
+                                  -----
+lib/glob/glob.c
+       - glob_filename: only check directory_name for globbing chars if
+         it's of non-zero length
+
+lib/sh/strchrnul.c
+       - new simpler implementation
+
+subst.c
+       - command_substitute: call set_shellopts after turning off errexit
+         in subshells so it's reflected in $SHELLOPTS
+
+                                  11/7
+                                  ----
+builtins/evalstring.c
+       - parse_and_execute: treat ERREXIT case like reader_loop does: set
+         variable_context to 0 before longjmping back to top_level. Don't
+         run the unwind-protect context to avoid side effects from popping
+         function contexts.  Part of fix for problem reported by Nikolai
+         Kondrashov <nikolai.kondrashov@redhat.com>
+
+execute_cmd.c
+       - execute_simple_command: call unlink_fifo_list only if this is the
+         last element of a pipeline (or not in a pipeline), rather than for
+         every child.  Fixes difference in behavior between /dev/fd and
+         FIFOs reported by Zev Weiss <zev@bewilderbeest.net>
+       - execute_null_command: do the same thing in the parent branch after
+         make_child
+
+                                  11/14
+                                  -----
+subst.c
+       - parameter_brace_expand: a variable is null if it's special ($@, $*),
+         the expansion occurs within double quotes, and the expansion turns
+         into a quoted null.  Fixes debian bug 692447 reported by
+         Matrosov Dmitriy <sgf.dma@gmail.com>
+
+jobs.c
+       - run_sigchld_trap: make sure `running_trap' sentinel is set
+         appropriately
+       - waitchld: only run the sigchld trap if we're not in a signal
+         handler, not running a trap, and executing the wait builtin.
+         Otherwise, queue for later handling.  We still run one instance
+         of the trap handler per exited child.  Bulk of fix for bug
+         reported by Elliott Forney <idfah@cs.colostate.edu>
+
+trap.c
+       - queue_sigchld_trap: set catch_flag so run_pending_traps notices,
+         and set trapped_signal_received for completeness.  Rest of fix
+         for bug reported by Elliott Forney <idfah@cs.colostate.edu>
+
+lib/malloc/malloc.c
+       - block_signals: renamed to _malloc_block_signals, made public
+       - unblock_signals: renamed to _malloc_unblock_signals, made public
+
+lib/malloc/imalloc.h
+       - extern declarations for _malloc_{un,}block_signals
+
+lib/malloc/table.c
+       - mregister_alloc, mregister_free: block signals around table
+         manipulation
+
+                                  11/15
+                                  -----
+trap.c
+       - run_pending_traps: set SIG_INPROGRESS flag around calls to
+         run_sigchld_handler so other parts of the shell know that the
+         SIGCHLD trap handler is executing
+       - run_pending_traps: if we get a situation where we are looking at
+         running a SIGCHLD trap but the trap string is IMPOSSIBLE_TRAP_HANDLER
+         and the SIG_INPROGRESS flag is set, just skip it.  This is possible
+         if run_pending_traps is called from a SIGCHLD trap handler run by
+         run_sigchld_trap
+
+doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
+       - corrected description of the effect of `set history-size 0'.  Report
+         from Vesa-Matti J Kari <vmkari@cc.helsinki.fi>
+
+include/stdc.h
+       - CPP_STRING: new define, replaces __STRING
+
+lib/malloc/{malloc.c,imalloc.h}
+       - replace __STRING with CPP_STRING
+
+                                  11/16
+                                  -----
+lib/readline/bind.c
+       - sv_histsize: if argument evaluates to a value < 0, unstifle the
+         history
+
+                                  11/22
+                                  -----
+redir.c
+       - do_redirection_internal: if we have REDIR_VARASSIGN set in the
+         redirection flags and we set up `redirector' using fcntl or dup2,
+         don't add a redirect to make sure it stays open.  Let the
+         script programmer manage the file handle.  Fixes bug reported by
+         Sam Liddicott <sam@liddicott.com>
+
+                                  11/24
+                                  -----
+jobs.c
+       - wait_for_any_job: new function, waits for an unspecified background
+         job to exit and returns its exit status.  Returns -1 on no background
+         jobs or no children or other errors.  Calls wait_for with new
+         sentinel value ANY_PID
+       - wait_for: changes to handle argument of ANY_PID: don't look up or
+         try to modify the child struct, only go through the wait loop once.
+         Return -1 if waitpid returns no children
+
+jobs.h
+       - ANY_PID: new define
+
+builtins/wait.def
+       - new option: -n. Means to wait for the next job and return its exit
+         status.  Returns 127 if there are no background jobs (or no
+         children).  Feature most recently requested by Elliott Forney
+         <idfah@cs.colostate.edu>
+
+doc/{bash.1,bashref.texi}
+       - document new `wait -n' option
+
+execute_cmd.c
+       - execute_command_internal: save make_command_string () result in a
+         temp variable before calling savestring() on it; avoids evaluating
+         make_command_string() result twice.  Fix from John E. Malmberg
+         <wb8tyw@qsl.net>
+
+                                  11/28
+                                  -----
+
+builtins/declare.def
+       - declare_internal: if an array variable is declared using `declare -a'
+         or `declare -A', but not assigned a value, set the `invisible'
+         attribute so the variable does not show up as set.  Fix for bug
+         about variable initialization reported by Tim Friske <me@timfriske.com>
+
+builtins/{mapfile,read}.def
+       - after calling find_or_make_array_variable, make sure the invisible
+         flag is turned off, in case the variable was declared previously
+         using `declare -a' or `declare -A'.  Side effect of above change to
+         declare_internal
+
+subst.c
+       - shell_expand_word_list: handle the W_ASSNGLOBAL flag and put -g into
+         the list of options passed to make_internal_declare as appropriate.
+         Fix for bug reported by Tim Friske <me@timfriske.com>
+
+                                  11/30
+                                  -----
+test.c
+       - unary_op: make sure -v and -n check that the variable is not marked
+         as invisible before calling var_isset.  Fix for bug reported by Tim
+         Friske <me@timfriske.com>
+
+                                  12/2
+                                  ----
+subst.c
+       - process_substitute: turn off the `expanding_redir' flag, which
+         controls whether or not variables.c:find_variable_internal uses the
+         temporary environment to find variables.  We want to use the
+         temp environment, since we don't have to worry about order of
+         evaluation in a subshell.  Fixes bug reported by Andrey Borzenkov
+         <arvidjaar@gmail.com>
+
+                                  12/4
+                                  ----
+lib/glob/glob.c
+       - glob_filename: changes to avoid null filenames and multiple entries
+         returned for patterns like **/** (globstar enabled).  Fixes bug
+         reported by Ulf Magnusson <ulfalizer@gmail.com>
+
+                                  12/10
+                                  -----
+lib/glob/glob.c
+       - glob_filename: finish up a series of changes to make globstar-style   
+         globbing more efficient, avoid more duplicate filenames, and be more
+         compatible with other shells that implement it
+               o collapse a sequence of **/**/** to one **
+               o note when the directory name is all ** or ends in ** so we
+                 can treat it specially when the filename is **
+         All inspired by report from Andrey Borzenkov <arvidjaar@gmail.com>
+
+lib/sh/zread.c
+       - zreadn: new function, like zread, but takes an additional argument
+         saying how many bytes to read into the local buffer.  Can be used to
+         implement `read -N' without so many one-byte calls to zreadc.  Code
+         from Mike Frysinger <vapier@gentoo.org>
+
+                                  12/12
+                                  -----
+lib/glob/sm_loop.c
+       - PATSCAN (glob_patscan): if passed string already points to end of
+         pattern, return NULL immediately.  Fixes problem with
+         extglob_skipname reported by Raphaël Droz <raphael.droz@gmail.com>
+
+                                  12/13
+                                  -----
+execute_cmd.c
+       - execute_coproc: handle the command's exit status being inverted
+         (an oversight).  Fixes bug reported by DJ Mills
+         <danielmills1@gmail.com> and Andreas Schwab <schwab@linux-m68k.org>
+
+                                  12/14
+                                  -----
+lib/readline/readline.c
+       - bind_arrow_keys_internal: add MINGW key bindings for Home, End,
+         Delete, and Insert keys.  Fix from Pierre Muller
+         <pierre.muller@ics-cnrs.unistra.fr>
+
+builtins/printf.def
+       - printf_builtin: '%()T' conversion: if there is no argument supplied,
+         behave as if -1 had been supplied (current time).  ksh93-like feature
+         suggested by Clark Wang <dearvoid@gmail.com>
+
+doc/{bash.1,bashref.texi}
+       - document new printf %()T default argument behavior
+
+                                  12/15
+                                  -----
+lib/readline/display.c
+       - displaying_prompt_first_line: new variable, indicates whether or
+         not the first line of output is displaying the prompt.  Always true
+         in normal mode, sometimes false in horizontal scrolling mode
+       - rl_redisplay: set displaying_prompt_first_line to true unless we
+         are in horizontal mode; set to false in horizontal mode if the left
+         margin of the displayed line is greater than the end of the prompt
+         string
+       - rl_redisplay: when in horizontal scroll mode, don't adjust
+         _rl_last_c_pos by the wrap offset unless the line is displaying
+         a prompt containing invisible chars
+       - update line: don't adjust _rl_last_c_pos by the wrap offset unless
+         the line is displaying a prompt containing invisible chars
+       - update_line: if shrinking the line by reducing the number of
+         displayed characters, but we have already moved the cursor to the
+         beginning of the line where the first difference starts, don't
+         try to delete characters
+
+builtins/read.def
+       - unbuffered_read: set to 2 if invoked as `read -N'
+       - if unbuffered_read is set to 2, compute the number of chars we
+         need to read and read that many with zreadn.  Posix mode still
+         uses zreadintr.  Code from Mike Frysinger <vapier@gentoo.org>
+
+doc/{bash.1,bashref.texi}
+       - read: make it clear that if read times out, it saves any input
+         read to that point into the variable arguments.  Report from
+         Fiedler Roman <Roman.Fiedler@ait.ac.at>
+
+subst.c
+       - command_substitute: change direct assignment of exit_immediately_on_error
+         to use change_flag ('e', FLAG_OFF) instead
+
+flags.c
+       - use errexit_flag as the variable modified by changes to the -e
+         option, reflect those changes to exit_immediately_on_error
+
+execute_cmd.c
+       - execute_builtin: new global variable, builtin_ignoring_errexit, set
+         to 0 by default and set to 1 if eval/source/command executing in a
+         context where -e should be ignored
+       - execute_builtin: set exit_immediately_on_error to errextit_flag
+         after executing eval/source/command in a context where -e should
+         be ignored
+
+flags.c
+       - if builtin_ignoring_errexit is set, changes to errexit_flag are
+         not reflected in the setting of exit_immediately_on_error.  Fixes
+         bug reported by Robert Schiele <rschiele@gmail.com>
+
+                                  12/23
+                                  -----
+include/posixjmp.h
+       - setjmp_nosigs: new define, call setjmp in such a way that it will
+         not manipulate the signal mask
+
+{expr,test,trap}.c
+       - setjmp_nosigs: call instead of setjmp; don't need to manipulate
+         signal mask
+
+builtins/read.def
+       - read_builtin: setjmp_nosigs: call instead of setjmp; don't need
+         to manipulate signal mask
+
+builtins/evalstring.c:
+       - parse_and_execute: setjmp_nosigs: call instead of setjmp; don't need
+         to manipulate signal mask
+       - parse_string: setjmp_nosigs: call instead of setjmp; don't need
+         to manipulate signal mask
+       - parse_and_execute: save and restore the signal mask if we get a
+         longjmp that doesn't cause us to return or exit (case DISCARD)
+
+                                  12/24
+                                  -----
+general.c
+       - bash_tilde_expand: only set interrupt_immediately if there are no
+         signals trapped; we want to jump to top level if interrupted but
+         not run any trap commands
+
+                                  12/25
+                                  -----
+jobs.c
+       - run_sigchld_trap: no longer set interrupt_immediately before calling
+         parse_and_execute, even if this is no longer run in a signal handler
+         context
+
+input.c
+       - getc_with_restart: add call to QUIT instead of CHECK_TERMSIG
+
+parse.y
+       - yy_stream_get: now that getc_with_restart calls QUIT, don't need to
+         set interrupt_immediately (already had call to run_pending_traps)
+
+execute_cmd.c
+       - execute_subshell_builtin_or_function,execute_function,execute_in_subshell:
+         setjmp_nosigs: call instead of setjmp when saving return_catch; don't
+         need to manipulate signal mask
+       - execute_subshell_builtin_or_function,execute_in_subshell:
+         setjmp_nosigs: call instead of setjmp where appropriate when saving
+         top_level; don't need to manipulate signal mask if we're going to
+         exit right away
+
+subst.c
+       - command_substitute: setjmp_nosigs: call instead of setjmp when saving
+         return_catch; don't need to manipulate signal mask
+       - command_substitute: setjmp_nosigs: call instead of setjmp where
+         appropriate when saving top_level; don't need to manipulate signal
+         mask if we're going to exit right away
+
+trap.c
+       - run_exit_trap: setjmp_nosigs: call instead of setjmp when saving
+         return_catch; don't need to manipulate signal mask
+       - run_exit_trap: setjmp_nosigs: call instead of setjmp where
+         appropriate when saving top_level; don't need to manipulate signal
+         mask if we're going to exit right away
+       - _run_trap_internal: setjmp_nosigs: call instead of setjmp when saving
+         return_catch; don't need to manipulate signal mask
+
+builtins/evalfile.c
+       - _evalfile: setjmp_nosigs: call instead of setjmp when saving
+         return_catch; don't need to manipulate signal mask
+
+builtins/evalstring.c
+       - evalstring: setjmp_nosigs: call instead of setjmp when saving
+         return_catch; don't need to manipulate signal mask
+
+shell.c
+       - main: setjmp_nosigs: call instead of setjmp where appropriate when
+         saving top_level; don't need to manipulate signal mask if we're
+         going to exit right away
+       - run_one_command: setjmp_nosigs: call instead of setjmp where
+         appropriate when saving top_level; don't need to manipulate signal
+         mask if we're going to exit right away
+       - run_wordexp: setjmp_nosigs: call instead of setjmp where
+         appropriate when saving top_level; don't need to manipulate signal
+         mask if we're going to exit right away
+
+eval.c
+       - reader_loop: save and restore the signal mask if we get a longjmp
+         that doesn't cause us to return or exit (case DISCARD)
+
+                                  12/26
+                                  -----
+parse.y
+       - shell_input_line_{index,size,len}: now of type size_t; in some cases
+         the unsigned property makes a difference
+       - STRING_SAVER: saved_line_{size,index} now of type size_t
+       - shell_getc: don't allow shell_input_line to grow larger than SIZE_MAX;
+         lines longer than that are truncated until read sees a newline;
+         addresses theoretical buffer overflow described by Paul Eggert
+         <eggert@cs.ucla.edu>
+       - set_line_mbstate: size_t changes like shell_getc
+       - shell_getc: if shell_input_line is larger than 32K, free it and
+         start over to avoid large memory allocations sticking around
+
+variables.c
+       - bind_global_variable: new function, binds value to a variable in
+         the global shell_variables table
+
+variables.h
+       - bind_global_variable: new extern declaration
+
+builtins/declare.def
+       - declare_internal: if -g given with name=value, but variable is not
+         found in the global variable table, make sure to call
+         bind_global_variable so the variable is created and modified at
+         global scope.  Fixes a bug where declare -g x=y could modify `x'
+         at a previous function scope
+
+command.h
+       - W_ASSIGNARRAY: new word flag, compound indexed array assignment
+
+subst.h
+       - ASS_MKGLOBAL: new assignment flag, forcing global assignment even in
+         a function context, used by declare -g
+
+execute_cmd.c
+       - fix_assignment_words: set W_ASSIGNARRAY flag if -a option given to
+         declaration builtin
+
+subst.c
+       - do_assignment_internal: explicitly handle case where we are
+         executing in a function and we want to create a global array or
+         assoc variable
+       - shell_expand_word_list: call make_internal_declare if -a option
+         given to declaration builtin (W_ASSIGNARRAY); handle -g option with
+         it (W_ASSNGLOBAL).  Fixes inconsistency noticed by Vicente Couce
+         Diaz <vituko@gmail.com>, where declare -ag foo=(bar) could modify
+         array variable foo at previous function scope, not global scope
+
+                                  12/27
+                                  -----
+bashline.c
+       - Minix needs the third argument to tputs to be a void funtion taking
+         an int argument, not an int-returning function.  Fix from
+         John E. Malmberg <wb8tyw@qsl.net> as part of VMS bash port
+
+                                  12/29
+                                  -----
+configure.ac,version.c,patchlevel.h
+       - bash-4.3-devel: new version, new shell compatibility level (43)
+
+subst.c
+       - parameter_brace_patsub: put the bash-4.2 code back in from the
+         change of 3/3 that runs the replacement string through quote
+         removal, make it dependent on shell_compatibility_level <= 42
+
+builtins/shopt.def
+       - compat42: new shopt option
+       - set_compatibility_level: change logic to set and unset various
+         compat variables and shell_compatibility_level
+
+COMPAT
+       - new documentation for bash-4.3 compatibility changes
+
+doc/{bash.1,bashref.texi}
+       - compat42: document new shopt option
+
+builtins/shopt.def
+       - set_compatibility_opts: new function, sets the various shopt
+         compat variables based on the value of shell_compatibility_level
+
+builtins/common.h
+       - set_compatibility_opts: new extern declaration
+
+variables.c
+       - BASH_COMPAT: new special variable; sets the shell compatibility
+         level.  Accepts values in decimal (4.2) or integer (42) form;
+         Unsetting variable, setting it to empty string, or setting it to
+         out-of-range value sets the shell's compatibility level to the
+         default for the current version.  Valid values are 3.1/31 through
+         the current version
+       - sv_shcompat: new function implementing logic for BASH_COMPAT
+
+variables.h
+       - sv_shcompat: new extern declaration
+
+doc/{bash.1,bashref.texi}
+       - BASH_COMPAT: description of new variable
+
+lib/readline/complete.c
+       - _rl_colored_stats: default back to 0 for 4.3 release branch
+
+                                1/5/2013
+                                --------
+quit.h
+       - remove spurious call to itrace in CHECK_WAIT_INTR
+
+bashline.c
+       - bash_event_hook: if we're going to jump to top_level, make sure we
+         clean up after readline() by calling rl_cleanup_after_signal().
+         Fixes bug reported against devel branch by Raphaël Droz
+         <raphael.droz@gmail.com>
+       - bash_event_hook: reset the event hook before checking for signals
+         or traps in case we longjmp
+
+doc/{bash.1,bashref.texi}
+       - small additions to the set -e section to make it more clear that
+         contexts where -e is ignored extend to compound commands as well
+         as shell functions
+
+lib/readline/readline.h
+       - rl_signal_event_hook: new extern declaration
+
+lib/readline/input.c
+       - rl_signal_event_hook: new variable, hook function to call when a
+         function (currently just read(2)) is interrupted by a signal and
+         not restarted
+       - rl_getc: call rl_signal_event_hook instead of rl_event_hook
+
+lib/readline/doc/rltech.texi
+       - rl_signal_event_hook: document new function
+
+bashline.c
+       - changes to set rl_signal_event_hook instead of rl_event_hook
+
+lib/readline/readline.h
+       - change readline version numbers to 6.3
+
+                                   1/6
+                                   ---
+doc/{bash.1,bashref.texi}
+       - a couple of changes to the descriptions of the ERR trap and its
+         effects based on a message from Rob Nagler <nagler@bivio.biz>
+
+                                   1/9
+                                   ---
+expr.c
+       - expassign: invalidate curlval before freeing and NULLing tokstr to
+         avoid aliasing issues.  Fixes bug reported by Eduardo A. Bustamante
+         López<dualbus@gmail.com>  and Dan Douglas <ormaaj@gmail.com>
+
+braces.c
+       - array_concat: don't be so aggressive in trying to short-circuit. We
+         can only short-circuit if we have a single-element array where the
+         element is an empty string (array[0] == "" array[1] = 0x0).  Existing
+         practice requires us to replicate arrays and prefix or append empty
+         strings.  Fixes bug reported by Eduardo A. Bustamante López
+         <dualbus@gmail.com>
+
+                                  1/11
+                                  ----
+execute_cmd.c
+       - execute_builtin: since mapfile uses evalstring() to run its callbacks
+         internally, just like eval, so it needs to handle the case where the
+         temp environment given to mapfile persists throughout the entire
+         set of callback commands.  This might be a problem with trap also, but
+         trap isn't run in the same way.  Fixes bug reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+                                  1/13
+                                  ----
+redir.c
+       - redirection_error: before expanding the redirection word (if
+         expandable_redirection_filename returns true), disable command
+         substitution during expansion.  Fixes bug reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+subst.c
+       - expand_word_internal: case '\\': if the next character is an IFS
+         character, and the expansion occurs within double quotes, and the
+         character is not one for which backslash retains its meaning, add
+         the (escaped) '\' and the (escaped) character.  Fixes bug reported
+         by Dan Douglas <ormaaj@gmail.com>
+
+                                  1/15
+                                  ----
+builtins/cd.def
+       - cd_builtin: make sure call to internal_getopt handles -e option.
+         Fixes bug reported by <mashimiao.fnst@cn.fujitsu.com>
+
+                                  1/17
+                                  ----
+subst.c
+       - expand_word_list_internal: make sure tempenv_assign_error is
+         initialized to 0
+
+execute_cmd.c
+       - execute_simple_command: make sure tempenv_assign_error is reset to 0
+         after it's tested to see if an error should force the shell to exit.
+         Fixes problem where a the failure of a tempenv assignment preceding
+         a non-special builtin `sticks' and causes the next special builtin
+         to exit the shell.  From a discussion on bug-bash started by
+         douxin <wq-doux@cn.fujitsu.com>
+
+                                  1/20
+                                  ----
+subst.c
+       - parameter_brace_expand_rhs: call stupidly_hack_special_variables
+         after assigning with ${param[:]=word} even if IFS is changing.
+         Suggested by Dan Douglas <ormaaj@gmail.com> [TENTATIVE, needs work
+         on IFS side effects]
+
+command.h
+       - W_GLOBEXP (which was unused) is now W_SPLITSPACE (which isn't used
+         yet)
+
+{execute_cmd,subst,variables}.c
+       - removed all code that mentioned W_GLOBEXP
+       - removed mention of gnu_argv_flags and code that set it
+
+                                  1/22
+                                  ----
+subst.c
+       - param_expand: set W_SPLITSPACE if we expand (unquoted) $* and
+         IFS is unset or null so we can be sure to split this on spaces
+         no matter what happens with IFS later
+       - expand_word_internal: note that param_expand returns W_SPLITSPACE
+         in the returned word flags and keep track of that state with
+         `split_on_spaces'
+
+                                  1/23
+                                  ----
+subst.c
+       - expand_word_internal: if split_on_spaces is non-zero, make sure
+         we split `istring' on spaces and return the resultant word.  The
+         previous expansions should have quoted spaces in the positional
+         parameters where necessary.  Suggested by Dan Douglas
+         <ormaaj@gmail.com>
+
+execute_cmd.c
+       - execute_command_internal: make sure any subshell forked to run a
+         group command or user subshell at the end of a pipeline runs any
+         EXIT trap it sets.  Fixes debian bash bug 698411
+         http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=698411
+
+subst.c
+       - shell_expand_word_list: fix code that creates args for and calls
+         make_internal_declare to avoid calling it twice (missing `else'
+         in 12/26 change)
+       - do_assignment_internal: fix code from 12/26 change to fix problem
+         where an existing assoc variable could be converted to an array
+         without checking `mkassoc'
+
+                                  1/24
+                                  ----
+builtins/evalfile.c
+       - _evalfile: add missing `close (fd)' calls before returning to
+         avoid fd leaks.  Bug and fix from Roman Rakus <rrakus@redhat.com>
+
+                                  1/25
+                                  ----
+builtins/read.def
+       - read_builtin: don't try to play tricks with the top of the unwind-
+         protect stack after read gets a SIGALRM; save input_string to new
+         memory, run the stack, then restore input_string and assign the
+         variables.  Part of fix for bug reported by konsolebox
+         <konsolebox@gmail.com>; the rest of the fix is with the changes in
+         trap and signal handling and doing away with interrupt_immediately
+
+                                  1/26
+                                  ----
+redir.c
+       - redirection_expand, write_here_string, write_here_document: before
+         calling any of the word expansion functions, after setting
+         expanding_redir to 1 (which bypasses the temp environment in the
+         variable lookup functions), call sv_ifs to reset the cached IFS-
+         related variables set by subst.c:setifs().  This ensures that
+         redirections will not get any IFS values that are set in the
+         temporary environment, as Posix specifies.  Then, after the word
+         expansions, after resetting expanding_redir to 0, call sv_ifs
+         again to make sure the cached IFS values are set from any
+         assignments in the temporary environment.  We force executing_builtin
+         to 1 to `fool' the variable lookup functions into using any temp
+         environment, then reset it to its old value after sv_ifs returns.
+         This is what allows read() to use the (cached) IFS variables set
+         in the temp environment. Fixes inconsistency reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+                                  1/29
+                                  ----
+lib/readline/display.c
+       - update_line: fix off-by-one error when updating vis_lbreaks array
+         in a multibyte locale that occurs when moving multibyte chars from
+         one line down to another.  Bug report and fix from Egmont
+         Koblinger <egmont@gmail.com>
+
+                                  1/30
+                                  ----
+configure.ac
+       - changed version to 4.3-alpha
+
+redir.c
+       - redir_open: handle open returning -1/EINTR, which seems to happen
+         a lot with FIFOs and SIGCHLD, and call QUIT to handle other
+         signals that can interrupt open(2).  Bug report and initial fix
+         from Mike Frysinger <vapier@gentoo.org>
+
+                                  1/31
+                                  ----
+subst.c
+       - parameter_brace_expand: make sure to propagate the PF_ASSIGNRHS flag
+         to parameter_brace_expand_word
+       - parameter_brace_expand_word: make sure that if the PF_ASSIGNRHS flag
+         is set and we are expanding ${a[@]} or ${a[*]} we set quoted to
+         include Q_DOUBLE_QUOTES before calling array_value_internal, mirroring
+         what we do for $@ and $*.  Fixes inconsistency reported by Dan
+         Douglas <ormaaj@gmail.com>
+
+configure.ac
+       - use AC_CHECK_TOOL instead of AC_CHECK_PROG to check for ar, since it
+         will find $host-prefixed versions of utilities.  Report and fix from
+         Mike Frysinger <vapier@gentoo.org>
+
+builtins/setattr.def
+       - set_var_attribute: check whether bind_variable (called when the
+         variable whose attributes are being modified is found in the temp
+         environment) just modified a read-only global variable, and don't
+         bother marking the temporary variable for propagation if so.  The
+         propagation is superfluous and will result in a strange error
+         message
+
+                                   2/2
+                                   ---
+variables.c
+       - initialize_shell_variables: don't try to import function definitions
+         with invalid names from the environment if already in posix mode,
+         but create them as (invisible) exported variables so they pass
+         through the environment.  Print an error message so user knows
+         what's wrong.  Fixes bug reported by Tomas Trnka <ttrnka@mail.muni.cz>
+
+                                   2/9
+                                   ---
+
+builtins/read.def
+       - sigalrm_seen, alrmbuf: now global so the rest of the shell (trap.c)
+         can use them
+       - sigalrm: just sets flag, no longer longjmps to alrmbuf; problem was
+         longjmp without manipulating signal mask, leaving SIGALRM blocked
+
+quit.h
+       - move CHECK_ALRM macro here from builtins/read.def so trap.c:
+         check_signals() can call it
+
+trap.c
+       - check_signals: add call to CHECK_ALRM before QUIT
+       - check_signals_and_traps: call check_signals() instead of including
+         CHECK_ALRM and QUIT inline.  Integrating check for read builtin's
+         SIGALRM (where zread call to check_signals_and_traps can see it)
+         fixes problem reported by Mike Frysinger <vapier@gentoo.org>
+
+                                  2/12
+                                  ----
+lib/glob/xmbsrtowcs.c
+       - xdupmbstowcs2: fixed but where end of string was not handled
+         correctly, causing loop to go past end of string in a bunch of cases.
+         Fixes bug reported by "Dashing" <dashing@hushmail.com>
+
+
+                                  2/13
+                                  ----
+builtins/pushd.def
+       - popd_builtin: treat any argument that isn't -n or of the form
+         [-+][[:digit:]]* as an error.  Fixes problem reported by Bruce
+         Korb <bruce.korb@gmail.com>
+
+                                  2/14
+                                  ----
+configure.ac
+       - add check for sig_atomic_t; already a placeholder for it in
+         config.h.in
+
+                                  2/15
+                                  ----
+subst.c
+       - do_compound_assignment: don't call assign_compound_array_list with
+         a NULL variable in case make_local_xxx_variable returns NULL
+         (it will if you try to shadow a readonly or noassign variable).
+         Fixes bug reported by Richard Tollerton <rich.tollerton@ni.com>
+
+                                  2/16
+                                  ----
+variables.c
+       - make_local_variable: print error messager if an attempt is made to
+         create a local variable shadowing a `noassign' variable.  Previously
+         we just silently refused to do it
+
+trap.[ch]
+       - get_original_signal: now global so rest of the shell can use it
+
+sig.c
+       - initialize_shell_signals: install a signal handler for SIGTERM
+         that does nothing except set a sigterm_received flag instead of
+         ignoring it with SIG_IGN, as long as SIGTERM is not ignored when
+         the shell is started.  Use get_original_signal early to get the
+         original handler, since we will do that later anyway
+       - set_signal_handler: if installing sigterm_sighandler as the SIGTERM
+         handler, make sure to add SA_RESTART flag to make it as close to
+         SIG_IGN as possible
+
+sig.h
+       - sigterm_sighandler: new extern declaration
+
+quit.h
+       - RESET_SIGTERM: set sigterm_receved to 0
+       - CHECK_SIGTERM: check sigterm_received; if it's non-zero, treat it
+         as a fatal signal and call termsig_handler to exit the shell
+
+jobs.c
+       - make_child: call RESET_SIGTERM just before fork() so we can detect
+         if the child process received a SIGTERM before it's able to change
+         the signal handler back to what it was when the shell started
+         (presumably SIG_DFL).  Only has effect if the shell installed
+         sigterm_sighandler for SIGTERM, interactive shells that were not
+         started with SIG_IGN as the SIGTERM handler
+       - make_child: call RESET_SIGTERM in the parent after fork() so the
+         rest of the shell won't react to it
+
+execute_cmd.c
+       - execute_simple_command: call CHECK_SIGTERM after make_child in child
+         to catch SIGTERM received after fork() and before restoring old
+         signal handlers
+       - execute_disk_command: call CHECK_SIGTERM after make_child in child
+         process after restoring old signal handlers and again just before
+         calling shell_execve.  Fixes race condition observed by
+         Padraig Brady <p@draigbrady.com> when testing with his `timeout'
+         program
+
+lib/readline/display.c
+       - open_some_spaces: new function, subset of insert_some_chars that just
+         opens up a specified number of spaces to be overwritten
+       - insert_some_spaces: now just calls to open_some_spaces followed by
+         _rl_output_some_chars
+       - update_line: use col_temp instead of recalculating it using
+         _rl_col_width in the case where we use more columns with fewer bytes
+       - update_line: use open_some_spaces and then output the right number
+         of chars instead of trying to print new characters then overwrite
+         existing characters in two separate calls.  This includes removing
+         some dodgy code and making things simpler.  Fix from Egmont
+         Koblinger <egmont@gmail.com>
+       - use new variable `bytes_to_insert' instead of overloading temp in
+         some code blocks (nls - nfd, bytes that comprise the characters
+         different in the new line from the old)
+
+                                  2/18
+                                  ----
+redir.c
+       - do_redirection_internal: add undoable redirection for the implicit
+         close performed by the <&n- and >&n- redirections.  Fixes bug
+         reported by Stephane Chazelas <stephane.chazelas@gmail.com>
+
+                                  2/19
+                                  ----
+sig.c
+       - termsig_handler: an interactive shell killed by SIGHUP and keeping
+         command history will try to save the shell history before exiting.
+         This is an attempt to preserve the save-history-when-the-terminal-
+         window-is-closed behavior
+
+                                  2/21
+                                  ----
+braces.c
+       - brace_expand: if a sequence expansion fails (e.g. because the
+         integers overflow), treat that expansion as a simple string, including
+         the braces, and try to process any remainder of the string.  The
+         remainder may include brace expansions.  Derived from SuSE bug
+         804551 example (https://bugzilla.novell.com/show_bug.cgi?id=804551)
+
+                                  2/23
+                                  ----
+{quit,sig}.h,sig.c
+       - sigterm_received declaration now in sig.h; type is sig_atomic_t
+       - sigwinch_received type now sig_atomic_t
+       - sig.h includes bashtypes.h and <signal.h> if SIG_DFL not defined
+         (same logic as trap.h) to pick up sig_atomic_t
+
+unwind_prot.c
+       - include sig.h before quit.h (reverse order)
+
+                                  2/27
+                                  ----
+builtins/shopt.def
+       - reset_shopt_options: make sure check_window_size is reset to the
+         default from config.h, not unconditionally to 0
+
+jobs.[ch]
+       - last_made_pid, last_asynchronous_pid: now volatile.  Change from SuSE
+
+jobs.c
+       - wait_for: if we're using sigaction to install a handler for SIGCHLD,
+         make sure we specify SA_RESTART
+
+lib/{tilde,readline}/shell.c
+       - get_home_dir: instead of looking in the password file every time,
+         look once and cache the result
+
+sig.[ch]
+       - sigwinch_received, sigterm_received: now `volatile' qualified
+
+sig.c,quit.h
+       - interrupt_state,terminating_signal: now sig_atomic_t
+
+                                   3/1
+                                   ---
+MANIFEST,examples/*
+       - removed around 120 files without FSF copyrights; requested by
+         Karl Berry in early January
+
+                                   3/2
+                                   ---
+lib/malloc/malloc.c
+       - morecore: only check whether SIGCHLD is trapped if SIGCHLD is defined
+
+doc/bashref.texi
+       - Fixed most of the examples in the GNU Parallel section to use better
+         shell idioms following complaints on bug-bash; added a couple of
+         examples and smoothed out the text
+
+quit.h
+       - include "sig.h" for sig_atomic_t
+
+lib/readline/display.c
+       - update_line: when inserting one or more characters at the end of
+         the display line in a non-multibyte environment, just write from the
+         first difference to the end of the line and return. We don't have
+         to adjust _rl_last_c_pos.  This is needed to adjust from the old
+         two-part copy to a single call to _rl_output_some_chars (change of
+         2/16)
+
+                                   3/4
+                                   ---
+Makefile.in,doc/Makefile.in
+       - PACKAGE_TARNAME, docdir: new variables substituted by autoconf
+       - OTHER_DOCS,OTHER_INSTALLED_DOCS: new variables with auxiliary
+         documentation files to be installed into $(docdir)
+       - install: add new rule to install $(OTHER_DOCS)
+       - uninstall: add new rule to uninstall $(docdir)/$(OTHER_INSTALLED_DOCS)
+
+doc/bash.1
+       - add URL to `POSIX' file in `SEE ALSO' section; put pointer to that
+         section in --posix and set -o posix descriptions
+
+examples/
+       - removed around 110 examples at the request of the FSF due to copyright
+         issues
+
+                                   3/5
+                                   ---
+builtins/setattr.def
+       - readonly: modified help text slightly to make it clearer that
+         functions aren't changed or displayed unless the -f option is given.
+         Report from <gotmynick@gmail.com>
+
+                                   3/9
+                                   ---
+include/typemax.h
+       - SIZE_MAX: define to 65535 (Posix minimum maximum) if not defined
+
+parse.y
+       - include "typemax.h" for possible SIZE_MAX definition, make sure we
+         include it after shell.h
+
+{braces,expr}.c
+       - include "typemax.h" for possible INTMAX_MIN and INTMAX_MAX definitions
+
+                                  3/10
+                                  ----
+bashline.c
+       - bash_default_completion: make sure completion type of `!' (same as
+         TAB but with show-all-if-ambiguous set) and glob-word-completion
+         sets rl_filename_completion_desired to 0 so extra backslashes don't
+         get inserted by `quoting' the completion.  We can't kill all the
+         matches because show-all-if-ambiguous needs them.   Bug report from
+         Marcel (Felix) Giannelia <info@skeena.net>
+
+[bash-4.3-alpha frozen]
+
+                                  3/14
+                                  ----
+general.c
+       - trim_pathname: use memmove instead of memcpy since the source and
+         destination pathnames may overlap.  Report and fix from Matthew
+         Riley <mattdr@google.com>
+
+                                  3/18
+                                  ----
+configure.ac
+       - socklen_t is defined as `unsigned int' if configure can't find it
+
+                                  3/20
+                                  ----
+lib/readline/complete.c
+       - S_ISVTX: since it's not defined on all platforms (Minix), make sure
+         its use is protected with #ifdef
+
+                                  3/21
+                                  ----
+doc/{bash.1,bashref.texi}
+       - Added mention of ${!name[@]} and ${!name[*]} expansions to get all
+         indices of an array.  Suggested by Jonathan Leffler
+         <jonathan.leffler@gmail.com>
+
+                                  3/24
+                                  ----
+subst.h
+       - SD_IGNOREQUOTE: new define for skip_to_delim; if set, means that
+         single quotes (for now) will be treated as ordinary characters
+
+subst.c
+       - skip_to_delim: handle SD_IGNOREQUOTE. no callers use it for now
+
+                                  3/25
+                                  ----
+support/config.{guess,sub}
+       - updated to versions from autoconf-2.69
+
+                                  3/31
+                                  ----
+lib/sh/shquote.c
+       - sh_single_quote: short-circuit quoting a single "'" instead of
+         creating a long string with empty single-quoted strings
+
+parser.h
+       - DOLBRACE_QUOTE2: new define, like DOLBRACE_QUOTE, but need to single-
+         quote results of $'...' expansion because quote removal will be
+         done later.  Right now this is only done for ${word/pat/rep}
+
+parse.y
+       - parse_matched_pair: set state to DOLBRACE_QUOTE2 for pattern
+         substitution word expansion so we don't treat single quote specially
+         in the pattern or replacement string
+       - parse_matched_pair: if we're parsing a dollar-brace word expansion
+         (${...}) and we're not treating single quote specially within
+         double quotes, single-quote the translation of $'...' ansi-c
+         escaped strings.  Original report and fix from Eduardo A.
+         Bustamante López <dualbus@gmail.com>
+
+subst.c
+       - extract_dollar_brace_string: ${word/pat/rep} scanning now sets the
+         DOLBRACE_QUOTE2 flag instead of DOLBRACE_QUOTE so we don't treat
+         single quotes specially within a double-quoted string
+
+execute_cmd.c
+       - fix_assignment_words: skip over assignment statements preceding a
+         command word before trying to figure out whether or not assignment
+         statements following a possible declaration command should be 
+         treated specially.  Fixes bug reported by Dan Douglas
+         <ormaaj@gmail.com>
+
+                                   4/4
+                                   ---
+lib/readline/readline.c
+       - _rl_dispatch_subseq: only call _rl_vi_set_last (and check whether
+         the key is a text modification command) if the key sequence length
+         is 1.  That keeps the arrow keys from setting the last command
+         when called in vi command mode.  Fixes bug reported by Ian A.
+         Watson <watson_ian_a@lilly.com>
+
+                                   4/6
+                                   ---
+lib/readline/bind.c
+       - rl_parse_and_bind: when parsing a double-quoted string as the value
+         of a variable, make sure we skip past the leading double quote.
+         Fix from Andreas Schwab <schwab@linux-m68k.org>
+
+variables.c
+       - hash_lookup: set new local variable last_table_searched to the table
+         a successful lookup appears in; tested in make_local_variable to
+         solve the problem below
+       - make_local_variable: if we find a variable with the tempenv flag
+         set at the same `level' as variable_context', but not found in the
+         temporary_env (temp environment preceding the builtin), return it.
+         The temp environment preceding the function call has already been
+         merged (in execute_function) into the list of variable contexts the
+         function sees as shell_variables by the time this is called.  Fixes
+         inconsistency pointed out by Dan Douglas <ormaaj@gmail.com>
+
+subst.c
+       - expand_arith_string: expanded out contents of expand_string,
+         expand_string_internal, expand_string_if_necessary to create a
+         WORD_DESC and call call_expand_word_internal() on it directly.
+         We don't want process substitution to be performed ( 1<(2) ) should
+         mean something different in an arithmetic expression context.
+         It doesn't work to just turn on the DQUOTE flag, since that means
+         that things like ${x["expression"]} are not expanded correctly.
+         Fixes problem pointed out by Dan Douglas <ormaaj@gmail.com>
+
+                                  4/13
+                                  ----
+subst.c
+       - process_substitute: run the EXIT trap before exiting, as other
+         shells seem to.  Fixes problem pointed out by Dan Douglas
+         <ormaaj@gmail.com>
+
+lib/readline/readline.c
+       - readline_internal_setup: call rl_vi_insertion_mode to enter vi
+         mode instead of rl_vi_insert_mode to avoid resetting the saved last
+         command information.  Posix says that `.' can repeat a command
+         that was entered on a previous line so we need to save the info.
+         Fixes bug reported by Ian A. Watson <watson_ian_a@lilly.com>
+
+                                  4/14
+                                  ----
+lib/readline/complete.c
+       - rl_completion_matches: make sure xrealloc returns something non-null
+         (can happen when interrupted by a signal) before trying to add
+         matches to match_list
+
+subst.c
+       - array_remove_pattern: return NULL right away if array_variable_part
+         returns an invisible variable
+       - array_length_reference: handle array_variable_part returning an
+         invisible variable
+       - get_var_and_type: handle array_variable_part returning an invisible
+         variable
+
+                                  4/15
+                                  ----
+execute_cmd.c
+       - execute_command_internal: make sure to run the EXIT trap for group
+         commands anywhere in pipelines, not just at the end.  From a point
+         raised by Andreas Schwab <schwab@linux-m68k.org>
+
+variables.c
+       - bind_int_variable: make sure invisible flag is unset.  Fixes problems
+         like "declare -ai a; : $(( a[4]=4 ));"
+
+arrayfunc.c
+       - array_variable_part: return variable even if invisible flag set,
+         callers must handle invisible vars
+
+                                  4/18
+                                  ----
+builtins/set.def
+       - unset_builtin: if -n flag given, call unset_nameref instead of
+         unset_variable
+
+variables.c
+       - find_variable_nameref: print warning message if nameref circular
+         reference detected, return NULL and let caller deal with it
+
+builtins/declare.def
+       - declare_builtin: only disallow global references at this point if
+         we are at the global scope
+
+                                  5/16
+                                  ----
+configure.ac
+       - update release status to beta
+
+                                  5/23
+                                  ----
+trap.c
+       - run_pending_traps: save and restore pipeline around calls to
+         evalstring() in case we get a trap while running a trap. Have to
+         figure out the recursive running traps issue elsewhere.  Fixes
+         bug reported by Roman Rakus <rrakus@redhat.com>
+       - run_pending_traps: make sure to set running_trap to the appropriate
+         signal value when running a trap command
+       - run_pending_traps: short-circuit immediately if running_trap set
+         when invoked.  Could change this later to only skip if it would
+         run the same trap as currently being run (running_trap == sig + 1)
+
+configure.ac
+       - add warning if bison not found
+
+lib/readline/doc/rltech.texi
+       - new section with an example program illustrating the callback
+         interface. Suggested by Peng Yu <pengyu.ut@gmail.com>
+
+examples/loadables/Makefile.in
+       - remove references to `cut' and `getconf', which were removed in
+         early March
+
+                                  5/28
+                                  ----
+lib/sh/pathphys.c
+       - sh_realpath: correct inverted two arguments to call to sh_makepath.
+         Report and fix from Julien Thomas <jthomas@exosec.fr>
+
+                                   6/7
+                                   ---
+execute_cmd.c
+       - executing_line_number: the else clauses that are conditional on
+         various options being defined can simply be if clauses -- they are
+         mutually exclusive and all have `return' in the body.  Fixes bug
+         reported by Flavio Medeiros <flaviomotamedeiros@gmail.com>
+
+                                  6/25
+                                  ----
+lib/readline/readline.c
+       - readline_internal_setup: only sent the meta-key enable string to the
+         terminal if we've been told to use one and the terminal has been
+         successfully initialized (RL_ISSTATE (RL_STATE_TERMPREPPED) != 0).
+         Suggested by Dan Mick <dan.mick@inktank.com>
+
+lib/readline/signals.c
+       - _rl_signal_handler: call any defined signal hook after calling
+         rl_resize_terminal when handling a SIGWINCH.  We already have called
+         the original SIGWINCH handler but will not be resending the signal
+         to ourselves
+
+                                  6/27
+                                  ----
+lib/readline/doc/history.3, doc/bash.1
+       - fix description of the `$' modifier to note that it expands to the
+         last *word*, which is not always the last argument.  Report from
+         ariyetz@gmail.com via gnu.org RT
+
+                                  6/29
+                                  ----
+lib/glob/smatch.c
+       - glob_asciiranges: initialize to value of GLOBASCII_DEFAULT instead
+         of 0 (0 if not defined)
+
+configure.ac,config.h.in
+       - --enable-glob-asciiranges-default: new option, controls the value of
+         GLOBASCII_DEFAULT; use it to turn globasciiranges shopt option on
+         by default
+
+doc/bashref.texi
+       - document new --enable-glob-asciiranges-default configure option
+
+variables.c
+       - assign_in_env: implement += value appending semantics for assignments
+         preceding command names
+
+                                   7/4
+                                   ---
+expr.c
+       - set lasttok = NUM in all of the functions that result in a number,
+         even if it's a boolean, to avoid errors with constructs like
+         1 * x = 1, which should be an asignment error.  Fixes problem
+         pointed out by Dan Douglas <ormaaj@gmail.com>
+
+parse.y
+       - decode_prompt_string: don't bother to call strcpy if
+         polite_directory_format returns its argument unchanged.  It's not
+         necessary and Mac OS X 10.9 aborts because of a supposed overlapping
+         string copy.  Bug and fix from simon@hitzemann.org
+
+subst.c
+       - parameter_brace_find_indir: new function, code from
+         parameter_brace_expand_indir that looks up the indirectly-referenced
+         variable, but does not expand it
+       - parameter_brace_expand_indir: call parameter_brace_find_indir to
+         look up indirected variable reference
+       - get_var_and_type: call parameter_brace_find_indir if it looks like we
+         are trying to manipulate an indirect variable reference like
+         ${!b%%foo}.  This makes a difference if !b references an array
+         variable.  Bug report from Dan Douglas <ormaaj@gmail.com>
+
+                                   7/6
+                                   ---
+lib/sh/casemod.c
+       - sh_modcase: make sure argument passed to is_basic is <= UCHAR_MAX,
+         since cval can convert something to a wchar_t greater than UCHAR_MAX.
+         Fixes bug reported by Tomasz Tomasik <scx.mail@gmail.com>
+
+                                   7/8
+                                   ---
+lib/readline/history.c
+       - add_history_time: if history_length == 0, referencing history_length
+         - 1 will result in an array bounds error, so make history_length be
+         at least 1 before going on.  Fixes bug reported by Geng Sheng Liu
+         <gsliu.tju@gmail.com>
+
+builtins/setattr.def
+       - show_func_attributes: display definition (if NODEFS argument is 0) and
+         attributes for a particular function; used by `declare -fp name'
+
+builtins/declare.def
+       - declare_internal: call show_func_attributes if -f supplied with -p.
+         Fixes inconsistency observed by Linda Walsh <bash@tlinx.org>
+
+builtins/common.h
+       - new extern declaration for show_func_attributes
+
+builtins/read.def
+       - read_builtin: check the first supplied variable name for validity
+         before attempting to read any input, since we know we will have to
+         at least use that one.  Don't check any other names yet.  Suggested
+         by jidanni@jidanni.org
+
+                                  7/10
+                                  ----
+redir.c
+       - do_redirection_internal: when closing a file descriptor with
+         r_close_this ([n]<&-) count close errors as redirection errors if
+         errno ends up as EIO or ENOSPC.  Originally reported back in April
+         2012 by Andrey Zaitsev <jstcdr@gmail.com>
+
+                                  7/11
+                                  ----
+redir.c
+       - do_redirection_internal: before calling check_bash_input, make sure
+         that we don't call check_bash_input for an asynchronous process that
+         is replacing stdin with something else. The seek backwards affects
+         the parent process as well, since parents and children share the
+         file pointer. Fixes problem originally reported in March 2013 by
+         Martin Jackson <mjackson220.list@gmail.com>
+
+                                  7/13
+                                  ----
+doc/{bash.1,bashref.texi}
+       - slight change to add a description of `shopt -o' suggested by Bruce
+         Korb <bruce.korb@gmail.com>
+
+                                  7/19
+                                  ----
+lib/readline/histfile.c
+       - history_do_write: if close returns < 0, make sure we restore the
+         backup history file and return a non-zero value
+       - history_truncate_file: if write or close return < 0, make sure we
+         return a non-zero value
+
+[bash-4.3-beta frozen]
+
+                                  7/21
+                                  ----
+lib/readline/isearch.c
+       - rl_display_search: now takes an entire search context flags word as
+         the second argument, instead of just reverse flag; changed callers
+       - rl_display_search: if the search has failed, add `failed ' to the
+         beginning of the search prompt
+       - _rl_isearch_dispatch: if the search has failed, display the entire
+         search string with an indication that the search failed but with the
+         last matching line.  Suggested by jidanni@jidanni.org
+
+command.h
+       - W_ASSIGNINT: new word flag; used internally for make_internal_declare
+         and set by fix_assignment_words
+
+execute_cmd.c
+       - fix_assignment_words: set W_ASSIGNINT if compound assignment and -i
+         given as option.  We don't do anything with the value yet
+
+subst.c
+       - shell_expand_word_list: rework the way the option list that is
+         passed to make_internal_declare is created
+
+                                   8/1
+                                   ---
+doc/{bash.1,bashref.texi}
+       - minor changes to description of $! based on a report from Chris
+         Down <chris@chrisdown.name>
+
+arrayfunc.c
+       - assign_array_element_internal: before trying to get an array's max
+         index to process a negative subscript, make sure the array exists.
+         Bug report from Geir Hauge <geir.hauge@gmail.com>
+
+                                   8/2
+                                   ---
+arrayfunc.c
+       - assign_array_element_internal: before using array_max_index() when
+         processing a negative subscript, make sure the variable is an array.
+         if it's not, use 0 as array_max_index assuming it's a string.
+         Fixes bug report from Geir Hauge <geir.hauge@gmail.com>
+
+                                   8/3
+                                   ---
+Makefile.in
+       - pcomplete.o: add dependency on $(DEFDIR)/builtext.h. Suggested by
+         Curtis Doty <curtis@greenkey.net>
+
+                                   8/5
+                                   ---
+lib/glob/sm_loop.c
+       - strcompare: short-circuit and return FNM_NOMATCH if the lengths of the
+         pattern and string (pe - p  and se - s, respectively) are not equal
+       - strcompare: don't bother trying to set *pe or *se to '\0' if that's
+         what they already are.  Fixes bug reported by Geir Hauge
+         <geir.hauge@gmail.com>
+
+                                   8/6
+                                   ---
+doc/{bash.1,bashref.texi},builtins/hash.def,lib/readline/doc/rluser.texi
+       - minor typo changes from Geir Hauge <geir.hauge@gmail.com>
+
+bultins/help.def
+       - show_longdoc: avoid trying to translate the empty string because it
+         often translates to some boilerplate about the project and
+         translation.  Report and fix from Geir Hauge <geir.hauge@gmail.com>
+
+                                   8/8
+                                   ---
+builtins/help.def
+       - help_builtin: try two passes through the list of help topics for each
+         argument: one doing exact string matching and one, if the first pass
+         fails to find a match, doing string prefix matching like previous
+         versions.  This prevents `help read' from matching both `read' and
+         `readonly', but allows `help r' to match everything beginning with
+         `r'.  Inspired by report from Geir Hauge <geir.hauge@gmail.com>
+
+                                  8/13
+                                  ----
+builtins/fc.def
+       - fc_builtin,fc_gethnum: calculate `real' end of the history list and
+         use it if -0 is specified as the beginning or end of the history
+         range to list.  Doesn't work for fc -e or fc -s by design.  Feature
+         requested by Mike Fied <micfied@gmail.com>
+
+                                  8/16
+                                  ----
+trap.c
+       - _run_trap_internal: use {save,restore}_parser_state instead of
+         {save,restore}_token_state. It's more comprehensive
+
+                                  8/23
+                                  ----
+doc/bash.1
+       - disown: remove repeated text.  Report and fix from Thomas Hood
+         <jdthood@gmail.com>
+
+                                  8/25
+                                  ----
+lib/readline/rltty.c
+       - set_special_char: fix prototype (last arg is rl_command_func_t *)
+
+sig.c
+       - set_signal_handler: return oact.sa_handler only if sigaction
+         succeeds; if it doesn't, return SIG_DFL (reasonable default).  From
+         https://bugzilla.redhat.com/show_bug.cgi?id=911404
+
+bashline.c
+       - attempt_shell_completion: fix to skip assignment statements preceding
+         command name even if there are no programmable completions defined.
+         From https://bugzilla.redhat.com/show_bug.cgi?id=994659
+       - attempt_shell_completion: if still completing command word following
+         assignment statements, do command completion even if programmable
+         completion defined for partial command name entered so far
+
+                                  8/26
+                                  ----
+pcomplete.c
+       - pcomp_filename_completion_function: make sure rl_filename_dequoting_function
+         is non-NULL before trying to call it.  Bug and fix from
+         Andreas Schwab <schwab@linux-m68k.org>
+
+bashline.c
+       - bash_command_name_stat_hook: if *name is not something we're going
+         to look up in $PATH (absolute_program(*name) != 0), just call the
+         usual bash_filename_stat_hook and return those results.  This makes
+         completions like $PWD/exam[TAB] add a trailing slash
+
+                                   9/2
+                                   ---
+builtins/read.def
+       - read_builtin: before comparing what we read to the delim, make sure
+         we are not supposed to be ignoring the delimiter (read -N).  We
+         set the delim to -1, but it's possible to read a character whose
+         int value ends up being between -1 and -128.  Fixes bug
+         reported by Stephane Chazelas <stephane.chazelas@gmail.com>
+
+doc/{bash.1,bashref.texi}
+       - word splitting: crib some language from Posix to make it clear that
+         characters in IFS are treated as field *terminators*, not field
+         *separators*.  Addresses issue raised by DJ Mills
+         <danielmills1@gmail.com>
+
+lib/readline/{util.c,rldefs.h}
+       - _rl_stricmp,_rl_strnicmp: now take const char * string arguments;
+         changed prototype declarations
+
+                                   9/5
+                                   ---
+doc/{bash.1,bashref.texi}
+       - [[: modify description of pattern matching to make it clear that the
+         match is performed as if the extglob option were enabled.  From Red
+         Hat bug https://bugzilla.redhat.com/show_bug.cgi?id=1002078
+
+                                  9/12
+                                  ----
+lib/readline/isearch.c
+       - _rl_isearch_dispatch: if we read an ESC and it's supposed to
+         terminate the search, make sure we check for typeahead with
+         _rl_pushed_input_available, since installing a hook function causes
+         typeahead to be collected in `ibuffer' (input.c).  If there is any,
+         make sure we still use the ESC as a prefix character.  Bug and fix
+         from Mike Miller <mtmiller@ieee.org>
+
+                                  9/16
+                                  ----
+builtins/{caller,cd,kill,pushd,wait}.def
+       - builtin_usage(): make sure call to this sets return status to
+         EX_USAGE
+
+                                  9/18
+                                  ----
+terminal.c
+       - rl_change_environment: new application-settable variable; if non-
+         zero (the default), readline will modify LINES and COLUMNS in the
+         environment when it handles SIGWINCH
+       - _rl_get_screen_size: if rl_change_environment is non-zero, use setenv
+         to modify LINES and COLUMNS environment variables
+
+readline.h
+       - rl_change_environment: new extern declaration for applications
+
+                                  9/22
+                                  ----
+configure.ac
+       - relstatus: bumped version to bash-4.3-beta2
+
+                                  9/24
+                                  ----
+
+lib/readline/readline.c
+       - bind_arrow_keys_internal: added more key bindings for the numeric key
+         pad arrow keys on mingw32.  Patch from Pierre Muller
+         <pierre.muller@ics-cnrs.unistra.fr>
+
+                                  10/19
+                                  -----
+
+bashline.c
+       - maybe_restore_tilde: version of restore_tilde that honors `direxpand';
+         calls restore_tilde after saving directory expansion hook if
+         necessary.  Report from Andreas Schwab <schwab@linux-m68k.org>
+
+builtins/cd.def
+       - -@: new option, allows cd to use `extended attributes' present in
+         NFSv4, ZFS; idea taken from ksh93.  Attributes associated with a
+         file are presented as a directory containing the attributes as
+         individual files.  Original patch contributed by Cedric Blancher
+         <cedric.blancher@gmail.com>
+
+                                  10/20
+                                  -----
+aclocal.m4
+       - BASH_CHECK_MULTIBYTE: check for wcwidth being broken with unicode
+         combining characters needs a value to use when cross-compiling.
+         Bug report from Bert Sutherland <bertsutherland@gmail.com>
+
+doc/{bash.1,bashref.texi}
+       - document new -@ option to cd builtin
+
+                                  10/28
+                                  -----
+lib/glob/{{gmisc,glob}.c,glob.h}
+       - extglob_pattern renamed to extglob_pattern_p, declared in glob.h
+
+subst.c
+       - expand_word_internal: typo fix: case to fix " $@\ " bug in bash-4.2
+         had a typo (& isexp instead of &&)
+
+                                  10/29
+                                  -----
+input.c
+       - getc_with_restart: make sure local_index and local_bufused are
+         reset to 0 before returning EOF, in case we are running an interactive
+         shell without line editing and ignoreeof is set.  Report and fix
+         from Yong Zhang <yong.zhang@windriver.com>
+
+lib/readline/search.c
+       - _rl_nsearch_init: take out extra third argument to rl_message; it
+         only matches prototype (and maybe format) in cases where
+         PREFER_STDARG and USE_VARARGS are both undefined, which is rare
+
+                                  10/31
+                                  -----
+subst.c
+       - process_substitute: when opening the named pipe in the child, open
+         without O_NONBLOCK to avoid race conditions.  Happens often on AIX.
+         Bug report and fix from Michael Haubenwallner
+         <michael.haubenwallner@salomon.at>
+
+builtins/ulimit.def
+       - RLIMIT_NTHR: if RLIMIT_PTHREAD is not defined, but RLIMIT_NTHR is,
+         use RLIMIT_NTHR (NetBSD)
+
+                                  11/5
+                                  ----
+locale.c
+       - set_default_locale_vars,set_locale_var: if TEXTDOMAINDIR has been
+         set, and default_dir has a non-null value, call bindtextdomain(3)
+         when TEXTDOMAIN is assigned a value.  Fixes problem reported by
+         Michael Arlt <qwertologe@googlemail.com>
+
+                                  11/6
+                                  ----
+builtins/cd.def
+       - cdxattr: only create synthetic pathname in `buf' if NDIRP argument
+         is non-null
+       - change_to_directory: if we have specified -@ and cdxattr returns
+         failure, fail immediately.  Fixes bug reported by Joshuah Hurst
+         <joshhurst@gmail.com>
+
+                                  11/12
+                                  -----
+redir.c
+       - print_redirection: change r_err_and_out (&>) and its append form,
+         r_append_err_and_out (&>>) cases to separate redirection operator
+         from filename by a space, in case we have a process substitution.
+         Fixes bug reported by admn ombres <admn.ombres@gmail.com>
+
+                                  11/15
+                                  -----
+execute_cmd.c
+       - execute_simple_command: don't close process substitution fds until
+         we are finished executing any current shell function.  Partial fix
+         for bug reported by John Dawson <john.dawson@gmail.com>
+
+support/shobj-conf
+       - add support for Darwin 13 (Mac OS X 10.9, Mavericks).  Based on a
+         report by Ludwig Schwardt <ludwig.schwardt@gmail.com>
+
+                                  11/20
+                                  -----
+[bash-4.3-rc1 frozen]
+
+                                  11/24
+                                  -----
+builtins/printf.def
+       - bind_printf_variable: make sure that the variable assigned to is
+         no longer marked as invisible. Fixes bug reported by NBaH
+         <nbah@sfr.fr>
+
+                                  11/28
+                                  -----
+jobs.c
+       - delete_old_job: fix off-by-one error in job index in call to
+         internal_warning. Bug report from Peter Cordes <peter@cordes.ca>
+
+                                  11/30
+                                  -----
+doc/bashref.texi
+       - add string to description of special parameters with name of
+         special parameter prefixed by a $, so you can search for $#,
+         for instance
+
+                                  12/2
+                                  ----
+lib/readline/{histexpand.c
+       - get_history_event: account for current_history() possibly returning
+         NULL. Report and fix from Pankaj Sharma <pankaj.s01@samsung.com>
+
+
+                                  12/11
+                                  -----
+
+lib/readline/parse-colors.c
+       - get_funky_string: don't call abort if we see something we can't
+         parse; just return an error
+       - _rl_parse_colors: if we encounter an error while parsing $LS_COLORS
+         we need to leave _rl_color_ext_list as NULL after freeing its
+         elements, then turn off _rl_colored_stats. Report and fix from Martin
+         Wesdorp <mwesdorp@casema.nl>
+
+                                  12/13
+                                  -----
+
+lib/readline/parse-colors.c
+       - _rl_parse_colors: if we encounter an unrecognized prefix, throw an
+         error but try to recover and go on to the next specification
+
+variables.c
+       - make_local_variable: for new variables this function creates, set
+         the att_invisible attribute.  All callers from declare_internal.
+         Indirectly, this is a fix for bug with `declare -n var; var=foo;'
+         reported by Pierre Gaston <pierre.gaston@gmail.com>
+       - bind_variable: if assigning to nameref variable that doesn't have
+         a value yet (e.g., with `declare -n var; var=foo'), don't try to
+         use the unset name. Fixes a segfault reported by Pierre Gaston
+         <pierre.gaston@gmail.com>
+
+execute_cmd.c
+       - execute_command_internal: make sure last_command_exit_value is set
+         to 0 after any command executed in the background.  Fixes bug
+         reported by Martin Kealey <martin@kurahaupo.gen.nz>
+
+                                  12/17
+                                  -----
+support/config.{guess,sub}
+       - updated to latest versions from git
+
+                                  12/19
+                                  -----
+parse.y
+       - struct STRING_SAVER: now has a new `flags' element, to identify the
+         caller: alias expansion, double-paren parsing, or parse_and_execute
+       - push_string: now sets flags to PSH_ALIAS if `ap' argument is non-NULL
+       - push_string: now doesn't attempt to call strlen on a NULL string to
+         set shell_input_line_size
+       - parser_expanding_alias, parser_save_alias, parser_restore_alias: new
+         functions to provide an external interface to push_string and
+         pop_string; parser_save_alias sets flags element to PSH_SOURCE (could
+         be renamed PSH_EXTERN someday)
+       - shell_getc: when yy_getc returns '\0', instead of just testing
+         whether the pushed_string_list is not-empty before popping it, don't
+         pop if if the saved string has flags PSH_SOURCE, indicating that
+         parse_and_execute set it before setting bash_input to the string.
+         We should continue reading to the end of that string before popping
+         back to a potential alias. Partial solution for the problem of aliases
+         with embedded newlines containing `.' commands being executed out of
+         order reported by Andrew Martin <andrew.martin@gmail.com>
+       - shell_getc: when yy_getc returns '\0' and there is a saved string of
+         type PSH_SOURCE, restart the read without popping the string stack
+         if we have not read to the end of bash_input.location.string.  Rest
+         of fix for out-of-order execution problem
+
+externs.h
+       - parser_expanding_alias, parser_save_alias, parser_restore_alias: new
+         extern function declarations
+
+builtins/evalstring.c
+       - pe_prologue: if the parser is expanding an alias, make sure to add
+         an unwind-protect to restore the alias; undoes the work that will be
+         performed by parse_and_execute/parse_string
+       - parse_and_execute,parse_string: after calling push_stream to save
+         bash_input, check whether or not the parser is currently expanding
+         an alias (parser_expanding_alias() != 0). If it is, we want to save
+         that string in the pushed_string_list, which we do with
+         parser_save_alias.
+
+                                  12/23
+                                  -----
+execute_cmd.c
+       - execute_for_command: make sure to set line_number before expanding
+         the word list, so expansion errors have the right line number.
+         From a report from Ben Okopnik <ben@okopnik.com>
+
+expr.c
+       - exp2: save token pointer before calling readtok(), arrange to use
+         saved token pointer when printing error token on a division by 0
+         error
+
+                                  12/27
+                                  -----
+lib/readline/display.c
+       - rl_redisplay: when calculating effects of invisible characters in a
+         prompt that is split across physical screen lines to set the indices
+         of linebreaks, don't bother testing local_prompt_prefix (line 751).
+         That prefix doesn't matter when calculating prompt visible and
+         invisible characters.  Fixes problem reported by Jinesh Choksi
+         <jinesh@onelittlehope.com>
+
+Makefile.in
+       - install: make sure to use $(DESTDIR) when installing OTHER_DOCS.
+         Report and fix from Matthias Klose <doko@debian.org>
+
+doc/texinfo.tex
+       - updated to version of 2013-09-11
+
+                                  12/28
+                                  -----
+lib/readline/undo.c
+       - rl_do_undo: if we are undoing from a history entry (rl_undo_list ==
+         current_history()->data), make sure the change to rl_line_buffer is
+         reflected in the history entry. We use the guts of
+         rl_maybe_replace_line to do the work.  Fixes problem reported by
+         gregrwm <backuppc-users@whitleymott.net>
+
+                                  12/30
+                                  -----
+sig.c
+       - sigint_sighandler: if we get a SIGINT (and this signal handler is
+         installed) while the wait builtin is running, note that we received
+         it in the same way as jobs.c:wait_sigint_handler and return.  The
+         various wait_for functions will look for that with CHECK_WAIT_INTR.
+         This fixes the wait builtin not being interruptible in an interactive
+         job control shell
+
+                                  12/31
+                                  -----
+trap.c
+       - set_signal_hard_ignored: rename set_signal_ignored to this, since it
+         both sets original_signals[sig] and sets the HARD_IGNORE flag
+       - set_signal_ignored: new function, now just sets original_signals[sig]
+
+trap.h
+       - set_signal_hard_ignored: new external declaration
+
+sig.c
+       - initialize_terminating_signals: call set_signal_hard_ignored instead
+         of set_signal_ignored for signals with disposition SIG_IGN when the
+         shell starts
+
+execute_cmd.c
+       - setup_async_signals: make sure we get the original dispositions for
+         SIGINT and SIGQUIT before starting the subshell, and don't call
+         set_signal_ignored  because that sets original_signals[sig].  If we
+         don't, subsequent attempts to reset handling using trap will fail
+         because it thinks the original dispositions were SIG_IGN. Posix
+         interpretation 751 (http://austingroupbugs.net/view.php?id=751)
+
+                                1/2/2014
+                                --------
+lib/sh/stringvec.c
+       - strvec_mcreate, strvec_mresize: versions of create and resize that
+         use malloc and realloc, respectively, instead of xmalloc/xrealloc
+
+braces.c
+       - expand_amble,mkseq: use strvec_mcreate/strvec_mresize so we can
+         catch and handle memory allocation failures instead of aborting
+         with the xmalloc/xrealloc interface
+
+lib/sh/strdup.c
+       - strdup replacement function for ancient systems that don't have it
+
+lib/sh/itos.c
+       - mitos: new function, itos that uses strdup instead of savestring
+
+externs.h
+       - strvec_mcreate/strvec_mresize: new extern declarations
+       - mitos: new extern declaration
+
+configure.ac
+       - bash version moved to 4.3-rc2
+
+                                   1/6
+                                   ---
+doc/bash.1,lib/readline/doc/{rluser.texi,readline.3}
+       - separate the description of what happens when readline reads the
+         tty EOF character from the description of delete-char, leaving a
+         note in the delete-char description about common binding for ^D.
+         From suggestion by Parke <parke.nexus@gmail.com>
+
+lib/readline/doc/{version.texi,history.3,*.texi}
+       - updated email addresses and copyright dates
+
+                                   1/7
+                                   ---
+variables.c
+       - delete_var: new function, just removes a variable from a hash table
+         and frees it, without doing anything else
+       - make_variable_value: if we are trying to assign to a nameref variable,
+         return NULL if the value is null or the empty string or not a valid
+         identifier
+
+variables.h
+       - delete_var: new extern declaration
+
+subst.h
+       - ASS_NAMEREF: new define for assignments, means assigning to a nameref
+         variable
+
+builtins/declare.def
+       - declare_internal: if we are creating and assigning to a nameref
+         variable, make sure the value is a valid variable name (checks done
+         by make_variable_value via bind_variable_value) and display an
+         error message, deleting the variable we just created, if it is not.
+         Fixes bug reported by Peggy Russell <prusselltechgroup@gmail.com>
+
+                                   1/9
+                                   ---
+builtins/declare.def
+       - declare_internal: turning on nameref attribute for an existing
+         variable turns off -i/-l/-u/-c attributes (essentially the ones
+         that cause evaluation at assignment time) for ksh93 compat
+
+builtins/setattr.def
+       - show_name_attributes: if asked to display attributes and values for
+         a nameref variable, don't follow the nameref chain to the end. More
+         ksh93 compat
+
+                                  1/10
+                                  ----
+trap.c
+       - _run_trap_internal: use {save,restore}_parser_state instead of
+         {save,restore}_token_state, like in run_pending_traps(); don't
+         need to save and restore last_command_exit_value as a result
+       - _run_trap_internal: call {save,restore}_pipeline like in
+         run_pending_traps()
+       - run_pending_traps: since we no longer run traps in a signal handler
+         context, do not block and unblock the trapped signal while the
+         trap is executing
+       - run_pending_traps: allow recursive invocations (basically, running
+         traps from a trap handler) with only a warning if the shell is
+         compiled in debug mode.  If a caller doesn't want this to happen,
+         it should test running_trap > 0. signal_in_progress (sig) only works
+         for the signals the shell handles specially
+
+bashline.c
+       - bash_event_hook: make sure we clean up readline if interrupt_state
+         is set, not only when SIGINT is not trapped.  check_signals_and_traps
+         will call check_signals, which calls QUIT, which will longjmp back
+         to top_level, running the interrupt trap along the way.  Fixes the
+         problem of signal handlers being reset out from under readline, and
+         not being set properly the next time readline is called, because
+         signals_set_flag is still set to 1.  XXX - might need to do this
+         for other signals too?
+
+                                  1/11
+                                  ----
+subst.h
+       - SD_GLOB: new define for skip_to_delim; means we are scanning a
+         glob pattern.
+
+subst.c
+       - skip_to_delim: if flags include SD_GLOB, assume we are scanning a
+         glob pattern.  Currently only used to skip bracket expressions
+         which may contain one of the delimiters
+
+                                  1/12
+                                  ----
+subst.c
+       - parameter_brace_expand: when expanding $@ as part of substring
+         expansion, pattern substitution, or case modification, don't turn
+         on the QUOTED_NULL flag.  The code that constructs the word to be
+         returned from expand_word_internal expects a different code path
+         when $@ is being expanded.  Fixes bug reported by Theodoros
+         V. Kalamatianos <thkala@gmail.com>
+
+                                  1/19
+                                  ----
+subst.c
+       - list_dequote_escapes: new function; analogue of list_quote_escapes
+
+pathexp.c
+       - quote_string_for_globbing: fix case where unescaped ^A is last char
+         in string; need to pass it through unaltered instead of turning it
+         into a bare backslash
+       - quote_string_for_globbing: when quoting for regexp matching in [[,
+         don't treat backslash as a quote character; quote the backslash as
+         any other character.  Part of investigation into reports from
+         Eduardo A. Bustamante López <dualbus@gmail.com>
+
+                                  1/25
+                                  ----
+builtins/gen-helpfiles.c
+       - write_helpfiles: add prototype
+       - make sure to #undef xmalloc/xfree/xrealloc/free if USING_BASH_MALLOC
+         is defined. the code does not use them, and we don't link against
+         xmalloc.o. Report from Linda Walsh <bash@tlinx.org>
+
+Makefile.in
+       - variables.o: add dependency on builtins/builtext.h; helps with
+         parallel builds.  Report from Linda Walsh <bash@tlinx.org>
+
+support/shobj-conf
+       - darwin: combine the stanzas into one that will not require them to
+         be updated on each Mac OS X release.  Report and fix from Max Horn
+         <max@quendi.de>
+
+                                  1/27
+                                  ----
+support/shobj-conf
+       - darwin: changed the install_name embedded into the shared library
+         to contain only the major version number, not the minor one. The
+         idea is that the minor versions should all be API/ABI compatible,
+         and it is better to link automatically with the latest one.  Idea
+         from Max Horn <max@quendi.de>
+
+                                  1/29
+                                  ----
+[bash-4.3-rc2 released]
+
+                                  1/30
+                                  ----
+lib/readline/readline.h
+       - rl_clear_history, rl_free_keymap: add extern declarations.  Report
+         from Hiroo Hayashi <hiroo.hayashi@computer.org>
+
+general.c
+       - include trap.h for any_signals_trapped() prototype
+
+lib/sh/unicode.c
+       - include <stdio.h> for sprintf prototype
+
+                                  1/31
+                                  ----
+execute_cmd.c
+       - execute_simple_command: only posix-mode shells should exit on an
+         assignment failure in the temporary environment preceding a special
+         builtin. This is what the documentation and code comments have
+         always said
+       - execute_simple_command: make sure redirection errors, word expansion
+         errors, and assignment errors to Posix special builtins cause a
+         non-interactive posix mode shell to exit.  Previously the shell
+         would not exit if the failed special builtin was on the LHS of ||
+         or &&
+
+pathexp.c
+       - quote_string_for_globbing: when quoting a regular expression
+         (QGLOB_REGEXP), allow an unquoted backslash to pass through
+         unaltered. Don't use it as a quote character or quote it.  More
+         investigation from 1/24 and report by Mike Frysinger
+         <vapier@gentoo.org>
+       - quote_string_for_globbing: when quoting a regular expression
+         (QGLOB_REGEXP), turn CTLESC CTLESC into CTLESC without adding a
+         backslash to quote it. We should not have to quote it because it is
+         not a character special to EREs. More investigation from 1/24
+
+lib/glob/glob.c
+       - glob_testdir: now takes a second flags argument (currently unused);
+         changed prototype and callers
+
+                                   2/1
+                                   ---
+lib/glob/glob.c
+       - glob_testdir: if flags argument includes GX_ALLDIRS (globstar), use
+         lstat so we skip symlinks when traversing the directory tree.
+         Originally reported by Chris Down <chris@chrisdown.name>
+
+                                   2/2
+                                   ---
+lib/readline/undo.c
+       - rl_do_undo: make sure CUR is non-zero before dereferencing it to
+         check cur->data against rl_undo_list.  Report and fix from
+         Andreas Schwab <schwab@linux-m68k.org>
+
+doc/{bash.1,bashref.texi}
+       - added slight clarifying language to the description of $*,
+         describing what happens when the expansion is not within double
+         quotes
+
+                                   2/4
+                                   ---
+test.c
+       - unary_test: add code to -v case so that it interprets `bare' array
+         references (foo[1]) and returns true if that index has a value
+
+                                   2/5
+                                   ---
+trap.c
+       - restore_default_signal: fix SIGCHLD special case for SIG_TRAPPED flag
+         off but SIG_INPROGRESS mode set and handler IMPOSSIBLE_TRAP_HANDLER;
+         continue with resetting handler in this case. maybe_set_sigchld_trap
+         will check these things before resetting sigchld trap from
+         run_sigchld_trap.  Fixes (apparently long-standing?) problem reported
+         by Alexandru Damian <alexandru.damian@intel.com>
+
+                                   2/6
+                                   ---
+lib/sh/strtrans.c
+       - ansic_quote: fixed a bug when copying a printable character that
+         consumes more than one byte; byte counter was not being incremented.
+         Bug report from jidanni@jidanni.org
+
+                                   2/7
+                                   ---
+input.c
+       - getc_with_restart: if read(2) returns -1/EINTR and interrupt_state or
+         terminating_signal is set (which means QUIT; will longjmp out of this
+         function), make sure the local buffer variables are zeroed out to
+         avoid reading past the end of the buffer on the next call.  Bug report
+         from Dan Jacobson <jidanni@jidanni.org>
+
+                                   2/9
+                                   ---
+bashline.c
+       - command_word_completion_function: if a directory in $PATH contains
+         quote characters, we need to quote them before passing the candidate
+         path to rl_filename_completion_function, which performs dequoting on
+         the pathname it's passed.  Fixes bug reported by Ilyushkin Nikita
+         <ilyushkeane@gmail.com>
+
+                                  2/11
+                                  ----
+parse.y
+       - xparse_dolparen: save and restore shell_eof_token around call to
+         parse_string, intead of just leaving it set to ')'
+       - shell_getc: when -v is set, only print the command line when
+         shell_eof_token is 0, so we don't print it multiple times when
+         recursively entering the parser to parse $(...) commands.  Fixes
+         bug reported by Greg Wooledge <wooledg@eeg.ccf.org>
+
+[changed release status to 4.3-release]
+
+                                  2/13
+                                  ----
+lib/sh/strtrans.c
+       - ansic_quote: handle case where mbrtowc reports that the multibyte
+         sequence is incomplete or invalid.  Fixes bug reported by
+         Eduardo A. Bustamante López <dualbus@gmail.com>
+
+                                  2/14
+                                  ----
+variables.c
+       - find_variable_nameref_context: fix a problem that caused the loop
+         to go one context too close to the global context.  In some cases,
+         simple variable assignment would set a variable in the global
+         context instead of a local context.  Bug report from
+         Geir Hauge <geir.hauge@gmail.com>
+
+                                  2/26
+                                  ----
+[bash-4.3 released]
+
+                                  2/27
+                                  ----
+aclocal.m4
+       - broken wcwidth check: fix typo reported by David Michael
+         <fedora.dm0@gmail.com>
+
+                                  2/28
+                                  ----
+support/bashbug.sh
+       - add ${BUGADDR} to error message printed if sending mail fails
+
+trap.c
+       - _run_trap_internal: don't call {save,restore}_pipeline if running
+         DEBUG trap; run_debug_trap calls them itself.  Fixes bug reported
+         by Moe Tunes <moetunes42@gmail.com>
+
+test.c
+       - unary_test: fix 'R' case by using find_variable_noref instead of
+         find_variable
+       - test_unop: add back missing 'R' case.  Fixes bug reported by
+         NBaH <nbah@sfr.fr>
+
+                                   3/7
+                                   ---
+pcomplete.c
+       - pcomp_curtxt: new variable, holds the original text to be completed
+         as passed to the programmable completion code
+       - pcomp_filename_completion_function: if we are running compgen
+         (presumably in a shell function completion) and performing readline
+         completion, check the word being completed.  If it's not empty, but
+         the original word passed to the programmable completion code is an
+         empty string (""), call a dequoting function if one is available.
+         This compensates for an assumption in bash-completion.  Reported by
+         Albert Shih <Albert.Shih@obspm.fr>
+
+lib/readline/readline.c
+       - _rl_dispatch_subseq: when deciding whether or not to set vi mode's
+         idea of the last command, use whether or not the dispatching keymap
+         is vi_movement_keymap instead of the key sequence length.  The `c',
+         `d', and `y' commands all take motion commands as `arguments' and
+         will produce key sequences longer than 1 character.  The arrow keys
+         will end up dispatching out of a different keymap, so the test will
+         prevent arrow keys from setting the last command (the problem in
+         bash-4.2). Bug report from Daan van Rossum <daan@flash.uchicago.edu>
+
+lib/readline/vi_mode.c
+       - _rl_vi_motion_command: convenience function to test whether a key is
+         a vi-mode motion command
+
+lib/readline/rlprivate.h
+       - _rl_vi_motion_command: extern declaration
diff --git a/CWRU/POSIX.NOTES.old b/CWRU/POSIX.NOTES.old
new file mode 100644 (file)
index 0000000..1707ab1
--- /dev/null
@@ -0,0 +1,82 @@
+Starting bash with the `--posix' command-line option or executing
+`set -o posix' while bash is running will cause bash to conform more
+closely to the Posix.2 standard by changing the behavior to match that
+specified by Posix.2 in areas where the bash default differs.
+
+The following list is what's changed when `posix mode' is in effect:
+
+1.  When a command in the hash table no longer exists, bash will re-search
+    $PATH to find the new location.  This is also available with
+    `shopt -s checkhash'.
+
+2.  The >& redirection does not redirect stdout and stderr.
+
+3.  The message printed by the job control code and builtins when a job
+    exits with a non-zero status is `Done(status)'.
+
+4.  Reserved words may not be aliased.
+
+5.  The Posix.2 PS1 and PS2 expansions of `!' -> history number and
+    `!!' -> `!' are enabled, and parameter expansion is performed on
+    the value regardless of the setting of the `promptvars' option.
+
+6.  Interactive comments are enabled by default.  (Note that bash has
+    them on by default anyway.)
+
+7.  The Posix.2 startup files are executed ($ENV) rather than the normal
+    bash files.
+
+8.  Tilde expansion is only performed on assignments preceding a command
+    name, rather than on all assignment statements on the line.
+
+9.  The default history file is ~/.sh_history (default value of $HISTFILE).
+
+10. The output of `kill -l' prints all the signal names on a single line,
+    separated by spaces.
+
+11. Non-interactive shells exit if `file' in `. file' is not found.
+
+12. Redirection operators do not perform pathname expansion on the word
+    in the redirection unless the shell is interactive
+
+13. Function names must be valid shell identifiers.  That is, they may not
+    contain characters other than letters, digits, and underscores, and
+    may not start with a digit.  Declaring a function with an illegal name
+    causes a fatal syntax error in non-interactive shells.
+
+14. Posix.2 `special' builtins are found before shell functions during command
+    lookup.
+
+15. If a Posix.2 special builtin returns an error status, a non-interactive
+    shell exits.  The fatal errors are those listed in the POSIX.2 standard,
+    and include things like passing incorrect options, redirection errors,
+    variable assignment errors for assignments preceding the command name,
+    and so on.
+
+16. The environment passed to executed commands is not sorted.  Neither is
+    the output of `set'.  This is not strictly Posix.2 behavior, but sh
+    does it this way.  Ksh does not.  It's not necessary to sort the
+    environment; no program should rely on it being sorted.
+
+17. If the `cd' builtin finds a directory to change to using $CDPATH, the
+    value it assigns to $PWD does not contain any symbolic links, as if
+    `cd -P' had been executed.
+
+18. A non-interactive shell exits with an error status if a variable
+    assignment error occurs when no command name follows the assignment
+    statements.  A variable assignment error occurs, for example, when
+    trying to assign a value to a read-only variable.
+
+19. A non-interactive shell exits with an error status if the iteration
+    variable in a for statement or the selection variable in a select
+    statement is a read-only variable.
+
+20. Process substitution is not available.
+
+21. Assignment statements preceding POSIX.2 `special' builtins persist in
+    the shell environment after the builtin completes.
+
+There is other Posix.2 behavior that bash does not implement.  Specifically:
+
+1.  Assignment statements affect the execution environment of all builtins,
+    not just special ones.
diff --git a/CWRU/old/set.def.save b/CWRU/old/set.def.save
new file mode 100644 (file)
index 0000000..87b78d7
--- /dev/null
@@ -0,0 +1,544 @@
+This file is set.def, from which is created set.c.
+It implements the "set" and "unset" builtins in Bash.
+
+Copyright (C) 1987, 1989, 1991 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 1, or (at your option) any later
+version.
+
+Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License along
+with Bash; see the file COPYING.  If not, write to the Free Software
+Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+
+$PRODUCES set.c
+
+#include <stdio.h>
+#include "../shell.h"
+#include "../flags.h"
+
+#include "bashgetopt.h"
+
+extern int interactive;
+extern int noclobber, posixly_correct;
+#if defined (READLINE)
+extern int rl_editing_mode, no_line_editing;
+#endif /* READLINE */
+
+$BUILTIN set
+$FUNCTION set_builtin
+$SHORT_DOC set [--abefhkmnptuvxldBCHP] [-o option] [arg ...]
+    -a  Mark variables which are modified or created for export.
+    -b  Notify of job termination immediately.
+    -e  Exit immediately if a command exits with a non-zero status.
+    -f  Disable file name generation (globbing).
+    -h  Locate and remember function commands as functions are
+        defined.  Function commands are normally looked up when
+        the function is executed.
+    -i  Force the shell to be an "interactive" one.  Interactive shells
+        always read `~/.bashrc' on startup.
+    -k  All keyword arguments are placed in the environment for a
+        command, not just those that precede the command name.
+    -m  Job control is enabled.
+    -n  Read commands but do not execute them.
+    -o option-name
+        Set the variable corresponding to option-name:
+            allexport    same as -a
+            braceexpand  same as -B
+#if defined (READLINE)
+            emacs        use an emacs-style line editing interface
+#endif /* READLINE */
+            errexit      same as -e
+            histexpand   same as -H
+            ignoreeof    the shell will not exit upon reading EOF
+            interactive-comments
+                         allow comments to appear in interactive commands
+            monitor      same as -m
+            noclobber    disallow redirection to existing files
+            noexec       same as -n
+            noglob       same as -f
+            nohash       same as -d
+            notify       save as -b
+            nounset      same as -u
+           physical     same as -P
+           posix        change the behavior of bash where the default
+                        operation differs from the 1003.2 standard to
+                        match the standard
+           privileged   same as -p
+            verbose      same as -v
+#if defined (READLINE)
+            vi           use a vi-style line editing interface
+#endif /* READLINE */
+            xtrace       same as -x
+    -p  Turned on whenever the real and effective user ids do not match.
+        Disables processing of the $ENV file and importing of shell
+        functions.  Turning this option off causes the effective uid and
+       gid to be set to the real uid and gid.
+    -t  Exit after reading and executing one command.
+    -u  Treat unset variables as an error when substituting.
+    -v  Print shell input lines as they are read.
+    -x  Print commands and their arguments as they are executed.
+    -l  Save and restore the binding of the NAME in a FOR command.
+    -d  Disable the hashing of commands that are looked up for execution.
+        Normally, commands are remembered in a hash table, and once
+        found, do not have to be looked up again.
+#if defined (BRACE_EXPANSION)
+    -B  the shell will perform brace expansion
+#endif /* BRACE_EXPANSION */
+#if defined (BANG_HISTORY)
+    -H  Enable ! style history substitution.  This flag is on
+        by default.
+#endif /* BANG_HISTORY */
+    -C  If set, disallow existing regular files to be overwritten
+        by redirection of output.
+    -P  If set, do not follow symbolic links when executing commands
+        such as cd which change the current directory.
+
+Using + rather than - causes these flags to be turned off.  The
+flags can also be used upon invocation of the shell.  The current
+set of flags may be found in $-.  The remaining n ARGs are positional
+parameters and are assigned, in order, to $1, $2, .. $n.  If no
+ARGs are given, all shell variables are printed.
+$END
+
+/* An a-list used to match long options for set -o to the corresponding
+   option letter. */
+struct {
+  char *name;
+  int letter;
+} o_options[] = {
+  { "allexport",  'a' },
+#if defined (BRACE_EXPANSION)
+  { "braceexpand",'B' },
+#endif
+  { "errexit",   'e' },
+  { "histexpand", 'H' },
+  { "monitor",   'm' },
+  { "noexec",    'n' },
+  { "noglob",    'f' },
+  { "nohash",    'd' },
+#if defined (JOB_CONTROL)
+  { "notify",    'b' },
+#endif /* JOB_CONTROL */
+  {"nounset",    'u' },
+  {"physical",    'P' },
+  {"privileged",  'p' },
+  {"verbose",    'v' },
+  {"xtrace",     'x' },
+  {(char *)NULL, 0},
+};
+
+#define MINUS_O_FORMAT "%-15s\t%s\n"
+
+void
+list_minus_o_opts ()
+{
+  register int i;
+  char *on = "on", *off = "off";
+
+  printf (MINUS_O_FORMAT, "noclobber", (noclobber == 1) ? on : off);
+
+  if (find_variable ("ignoreeof") || find_variable ("IGNOREEOF"))
+    printf (MINUS_O_FORMAT, "ignoreeof", on);
+  else
+    printf (MINUS_O_FORMAT, "ignoreeof", off);
+
+  printf (MINUS_O_FORMAT, "interactive-comments",
+         interactive_comments ? on : off);
+
+  printf (MINUS_O_FORMAT, "posix", posixly_correct ? on : off);
+
+#if defined (READLINE)
+  if (no_line_editing)
+    {
+      printf (MINUS_O_FORMAT, "emacs", off);
+      printf (MINUS_O_FORMAT, "vi", off);
+    }
+  else
+    {
+      /* Magic.  This code `knows' how readline handles rl_editing_mode. */
+      printf (MINUS_O_FORMAT, "emacs", (rl_editing_mode == 1) ? on : off);
+      printf (MINUS_O_FORMAT, "vi", (rl_editing_mode == 0) ? on : off);
+    }
+#endif /* READLINE */
+
+  for (i = 0; o_options[i].name; i++)
+    {
+      int *on_or_off, zero = 0;
+
+      on_or_off = find_flag (o_options[i].letter);
+      if (on_or_off == FLAG_UNKNOWN)
+       on_or_off = &zero;
+      printf (MINUS_O_FORMAT, o_options[i].name, (*on_or_off == 1) ? on : off);
+    }
+}
+
+set_minus_o_option (on_or_off, option_name)
+     int on_or_off;
+     char *option_name;
+{
+  int option_char = -1;
+
+  if (STREQ (option_name, "noclobber"))
+    {
+      if (on_or_off == FLAG_ON)
+       bind_variable ("noclobber", "");
+      else
+       unbind_variable ("noclobber");
+      stupidly_hack_special_variables ("noclobber");
+    }
+  else if (STREQ (option_name, "ignoreeof"))
+    {
+      unbind_variable ("ignoreeof");
+      unbind_variable ("IGNOREEOF");
+      if (on_or_off == FLAG_ON)
+       bind_variable ("IGNOREEOF", "10");
+      stupidly_hack_special_variables ("IGNOREEOF");
+    }
+  
+#if defined (READLINE)
+  else if ((STREQ (option_name, "emacs")) || (STREQ (option_name, "vi")))
+    {
+      if (on_or_off == FLAG_ON)
+       {
+         rl_variable_bind ("editing-mode", option_name);
+
+         if (interactive)
+           with_input_from_stdin ();
+         no_line_editing = 0;
+       }
+      else
+       {
+         int isemacs = (rl_editing_mode == 1);
+         if ((isemacs && STREQ (option_name, "emacs")) ||
+             (!isemacs && STREQ (option_name, "vi")))
+           {
+             if (interactive)
+               with_input_from_stream (stdin, "stdin");
+             no_line_editing = 1;
+           }
+         else
+           builtin_error ("not in %s editing mode", option_name);
+       }
+    }
+#endif /* READLINE */
+  else if (STREQ (option_name, "interactive-comments"))
+    interactive_comments = (on_or_off == FLAG_ON);
+  else if (STREQ (option_name, "posix"))
+    {
+      posixly_correct = (on_or_off == FLAG_ON);
+      unbind_variable ("POSIXLY_CORRECT");
+      unbind_variable ("POSIX_PEDANTIC");
+      if (on_or_off == FLAG_ON)
+       {
+         bind_variable ("POSIXLY_CORRECT", "");
+         stupidly_hack_special_variables ("POSIXLY_CORRECT");
+       }
+    }
+  else
+    {
+      register int i;
+      for (i = 0; o_options[i].name; i++)
+       {
+         if (STREQ (option_name, o_options[i].name))
+           {
+             option_char = o_options[i].letter;
+             break;
+           }
+       }
+      if (option_char == -1)
+       {
+         builtin_error ("%s: unknown option name", option_name);
+         return (EXECUTION_FAILURE);
+       }
+      if (change_flag (option_char, on_or_off) == FLAG_ERROR)
+       {
+         bad_option (option_name);
+         return (EXECUTION_FAILURE);
+       }
+    }
+  return (EXECUTION_SUCCESS);
+}
+
+/* Set some flags from the word values in the input list.  If LIST is empty,
+   then print out the values of the variables instead.  If LIST contains
+   non-flags, then set $1 - $9 to the successive words of LIST. */
+set_builtin (list)
+     WORD_LIST *list;
+{
+  int on_or_off, flag_name, force_assignment = 0;
+
+  if (!list)
+    {
+      SHELL_VAR **vars;
+
+      vars = all_shell_variables ();
+      if (vars)
+       {
+         print_var_list (vars);
+         free (vars);
+       }
+
+      vars = all_shell_functions ();
+      if (vars)
+       {
+         print_var_list (vars);
+         free (vars);
+       }
+
+      return (EXECUTION_SUCCESS);
+    }
+
+  /* Check validity of flag arguments. */
+  if (*list->word->word == '-' || *list->word->word == '+')
+    {
+      register char *arg;
+      WORD_LIST *save_list = list;
+
+      while (list && (arg = list->word->word))
+       {
+         char c;
+
+         if (arg[0] != '-' && arg[0] != '+')
+           break;
+
+         /* `-' or `--' signifies end of flag arguments. */
+         if (arg[0] == '-' &&
+             (!arg[1] || (arg[1] == '-' && !arg[2])))
+           break;
+
+         while (c = *++arg)
+           {
+             if (find_flag (c) == FLAG_UNKNOWN && c != 'o')
+               {
+                 char s[2];
+                 s[0] = c; s[1] = '\0';
+                 bad_option (s);
+                 if (c == '?')
+                   builtin_usage ();
+                 return (c == '?' ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+               }
+           }
+         list = list->next;
+       }
+      list = save_list;
+    }
+
+  /* Do the set command.  While the list consists of words starting with
+     '-' or '+' treat them as flags, otherwise, start assigning them to
+     $1 ... $n. */
+  while (list)
+    {
+      char *string = list->word->word;
+
+      /* If the argument is `--' or `-' then signal the end of the list
+        and remember the remaining arguments. */
+      if (string[0] == '-' && (!string[1] || (string[1] == '-' && !string[2])))
+       {
+         list = list->next;
+
+         /* `set --' unsets the positional parameters. */
+         if (string[1] == '-')
+           force_assignment = 1;
+
+         /* Until told differently, the old shell behaviour of
+            `set - [arg ...]' being equivalent to `set +xv [arg ...]'
+            stands.  Posix.2 says the behaviour is marked as obsolescent. */
+         else
+           {
+             change_flag ('x', '+');
+             change_flag ('v', '+');
+           }
+
+         break;
+       }
+
+      if ((on_or_off = *string) &&
+         (on_or_off == '-' || on_or_off == '+'))
+       {
+         int i = 1;
+         while (flag_name = string[i++])
+           {
+             if (flag_name == '?')
+               {
+                 builtin_usage ();
+                 return (EXECUTION_SUCCESS);
+               }
+             else if (flag_name == 'o') /* -+o option-name */
+               {
+                 char *option_name;
+                 WORD_LIST *opt;
+
+                 opt = list->next;
+
+                 if (!opt)
+                   {
+                     list_minus_o_opts ();
+                     continue;
+                   }
+
+                 option_name = opt->word->word;
+
+                 if (!option_name || !*option_name || (*option_name == '-'))
+                   {
+                     list_minus_o_opts ();
+                     continue;
+                   }
+                 list = list->next; /* Skip over option name. */
+
+                 if (set_minus_o_option (on_or_off, option_name) != EXECUTION_SUCCESS)
+                   return (EXECUTION_FAILURE);
+               }
+             else
+               {
+                 if (change_flag (flag_name, on_or_off) == FLAG_ERROR)
+                   {
+                     char opt[3];
+                     opt[0] = on_or_off;
+                     opt[1] = flag_name;
+                     opt[2] = '\0';
+                     bad_option (opt);
+                     builtin_usage ();
+                     return (EXECUTION_FAILURE);
+                   }
+               }
+           }
+       }
+      else
+       {
+         break;
+       }
+      list = list->next;
+    }
+
+  /* Assigning $1 ... $n */
+  if (list || force_assignment)
+    remember_args (list, 1);
+  return (EXECUTION_SUCCESS);
+}
+
+$BUILTIN unset
+$FUNCTION unset_builtin
+$SHORT_DOC unset [-f] [-v] [name ...]
+For each NAME, remove the corresponding variable or function.  Given
+the `-v', unset will only act on variables.  Given the `-f' flag,
+unset will only act on functions.  With neither flag, unset first
+tries to unset a variable, and if that fails, then tries to unset a
+function.  Some variables (such as PATH and IFS) cannot be unset; also
+see readonly.
+$END
+
+#define NEXT_VARIABLE()        any_failed++; list = list->next; continue;
+
+unset_builtin (list)
+  WORD_LIST *list;
+{
+  int unset_function, unset_variable, unset_array, opt, any_failed;
+  char *name;
+
+  unset_function = unset_variable = unset_array = any_failed = 0;
+
+  reset_internal_getopt ();
+  while ((opt = internal_getopt (list, "fv")) != -1)
+    {
+      switch (opt)
+       {
+       case 'f':
+         unset_function = 1;
+         break;
+       case 'v':
+         unset_variable = 1;
+         break;
+       default:
+         builtin_usage ();
+         return (EXECUTION_FAILURE);
+       }
+    }
+
+  list = loptend;
+
+  if (unset_function && unset_variable)
+    {
+      builtin_error ("cannot simultaneously unset a function and a variable");
+      return (EXECUTION_FAILURE);
+    }
+
+  while (list)
+    {
+      SHELL_VAR *var;
+      int tem;
+#if defined (ARRAY_VARS)
+      char *t;
+#endif
+
+      name = list->word->word;
+
+#if defined (ARRAY_VARS)
+      if (!unset_function && valid_array_reference (name))
+       {
+         t = strchr (name, '[');
+         *t++ = '\0';
+         unset_array++;
+       }
+#endif
+
+      var = unset_function ? find_function (name) : find_variable (name);
+
+      if (var && !unset_function && non_unsettable_p (var))
+       {
+         builtin_error ("%s: cannot unset", name);
+         NEXT_VARIABLE ();
+       }
+
+      /* Posix.2 says that unsetting readonly variables is an error. */
+      if (var && readonly_p (var))
+       {
+         builtin_error ("%s: cannot unset: readonly %s",
+                        name, unset_function ? "function" : "variable");
+         NEXT_VARIABLE ();
+       }
+
+      /* Unless the -f option is supplied, the name refers to a variable. */
+#if defined (ARRAY_VARS)
+      if (var && unset_array)
+       {
+         if (array_p (var) == 0)
+           {
+             builtin_error ("%s: not an array variable", name);
+             NEXT_VARIABLE ();
+           }
+         else
+           tem = unbind_array_element (var, t);
+       }
+      else
+#endif /* ARRAY_VARS */
+      tem = makunbound (name, unset_function ? shell_functions : shell_variables);
+
+      /* This is what Posix.2 draft 11+ says.  ``If neither -f nor -v
+        is specified, the name refers to a variable; if a variable by
+        that name does not exist, a function by that name, if any,
+        shall be unset.'' */
+      if ((tem == -1) && !unset_function && !unset_variable)
+       tem = makunbound (name, shell_functions);
+
+      if (tem == -1)
+       any_failed++;
+      else if (!unset_function)
+       stupidly_hack_special_variables (name);
+
+      list = list->next;
+    }
+
+  if (any_failed)
+    return (EXECUTION_FAILURE);
+  else
+    return (EXECUTION_SUCCESS);
+}
diff --git a/CWRU/save/unwind_prot.h.save b/CWRU/save/unwind_prot.h.save
new file mode 100644 (file)
index 0000000..998fd72
--- /dev/null
@@ -0,0 +1,50 @@
+/* unwind_prot.h - Macros and functions for hacking unwind protection. */
+
+/* Copyright (C) 1993 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software; you can redistribute it and/or modify it under
+   the terms of the GNU General Public License as published by the Free
+   Software Foundation; either version 2, or (at your option) any later
+   version.
+
+   Bash is distributed in the hope that it will be useful, but WITHOUT ANY
+   WARRANTY; without even the implied warranty of MERCHANTABILITY or
+   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+   for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with Bash; see the file COPYING.  If not, write to the Free Software
+   Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#if !defined (_UNWIND_PROT_H)
+#define _UNWIND_PROT_H
+
+/* Run a function without interrupts. */
+extern void begin_unwind_frame ();
+extern void discard_unwind_frame ();
+extern void run_unwind_frame ();
+extern void add_unwind_protect ();
+extern void remove_unwind_protect ();
+extern void run_unwind_protects ();
+extern void unwind_protect_var ();
+
+/* Define for people who like their code to look a certain way. */
+#define end_unwind_frame()
+
+/* How to protect an integer. */
+#define unwind_protect_int(X) unwind_protect_var (&(X), (char *)(X), sizeof (int))
+
+/* How to protect a pointer to a string. */
+#define unwind_protect_string(X) \
+  unwind_protect_var ((int *)&(X), (X), sizeof (char *))
+
+/* How to protect any old pointer. */
+#define unwind_protect_pointer(X) unwind_protect_string (X)
+
+/* How to protect the contents of a jmp_buf. */
+#define unwind_protect_jmp_buf(X) \
+  unwind_protect_var ((int *)(X), (char *)(X), sizeof (procenv_t))
+
+#endif /* _UNWIND_PROT_H */
index 8176b67d65367f2e2700b30dbe0d6c697c84724a..f4677fa39eff9579d6420da3b9ac079a48515a79 100644 (file)
@@ -1,7 +1,7 @@
 @%:@! /bin/sh
 @%:@ From configure.ac for Bash 4.3, version 4.063.
 @%:@ Guess values for system-dependent variables and create Makefiles.
-@%:@ Generated by GNU Autoconf 2.69 for bash 4.3-release.
+@%:@ Generated by GNU Autoconf 2.69 for bash 4.3-maint.
 @%:@
 @%:@ Report bugs to <bug-bash@gnu.org>.
 @%:@ 
@@ -581,8 +581,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='bash'
 PACKAGE_TARNAME='bash'
-PACKAGE_VERSION='4.3-release'
-PACKAGE_STRING='bash 4.3-release'
+PACKAGE_VERSION='4.3-maint'
+PACKAGE_STRING='bash 4.3-maint'
 PACKAGE_BUGREPORT='bug-bash@gnu.org'
 PACKAGE_URL=''
 
@@ -1393,7 +1393,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bash 4.3-release to adapt to many kinds of systems.
+\`configure' configures bash 4.3-maint to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1458,7 +1458,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bash 4.3-release:";;
+     short | recursive ) echo "Configuration of bash 4.3-maint:";;
    esac
   cat <<\_ACEOF
 
@@ -1650,7 +1650,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-bash configure 4.3-release
+bash configure 4.3-maint
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2359,7 +2359,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bash $as_me 4.3-release, which was
+It was created by bash $as_me 4.3-maint, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2753,7 +2753,7 @@ ac_config_headers="$ac_config_headers config.h"
 
 
 BASHVERS=4.3
-RELSTATUS=release
+RELSTATUS=maint
 
 case "$RELSTATUS" in
 alp*|bet*|dev*|rc*|maint*)     DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
@@ -16551,7 +16551,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by bash $as_me 4.3-release, which was
+This file was extended by bash $as_me 4.3-maint, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -16617,7 +16617,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-bash config.status 4.3-release
+bash config.status 4.3-maint
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index f4677fa39eff9579d6420da3b9ac079a48515a79..41b9b5a041fe6ab5bb876361867a56277b9682b1 100644 (file)
@@ -1,12 +1,14 @@
 @%:@! /bin/sh
-@%:@ From configure.ac for Bash 4.3, version 4.063.
+@%:@ From configure.in for Bash 4.2, version 4.049.
 @%:@ Guess values for system-dependent variables and create Makefiles.
-@%:@ Generated by GNU Autoconf 2.69 for bash 4.3-maint.
+@%:@ Generated by GNU Autoconf 2.68 for bash 4.2-maint.
 @%:@
 @%:@ Report bugs to <bug-bash@gnu.org>.
 @%:@ 
 @%:@ 
-@%:@ Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
+@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software
+@%:@ Foundation, Inc.
 @%:@ 
 @%:@ 
 @%:@ This configure script is free software; the Free Software Foundation
@@ -135,31 +137,6 @@ export LANGUAGE
 # CDPATH.
 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in @%:@ ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
 if test "x$CONFIG_SHELL" = x; then
   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
@@ -193,8 +170,7 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
 else
   exitcode=1; echo positional parameters were not saved.
 fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
+test x\$exitcode = x0 || exit 1"
   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
@@ -239,25 +215,21 @@ IFS=$as_save_IFS
 
 
       if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in @%:@ ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
+  # We cannot yet assume a decent shell, so we have to provide a
+       # neutralization value for shells without unset; and this also
+       # works around shells that cannot unset nonexistent variables.
+       # Preserve -v and -x to the replacement shell.
+       BASH_ENV=/dev/null
+       ENV=/dev/null
+       (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+       export CONFIG_SHELL
+       case $- in @%:@ ((((
+         *v*x* | *x*v* ) as_opts=-vx ;;
+         *v* ) as_opts=-v ;;
+         *x* ) as_opts=-x ;;
+         * ) as_opts= ;;
+       esac
+       exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -360,14 +332,6 @@ $as_echo X"$as_dir" |
 
 
 } @%:@ as_fn_mkdir_p
-
-@%:@ as_fn_executable_p FILE
-@%:@ -----------------------
-@%:@ Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} @%:@ as_fn_executable_p
 @%:@ as_fn_append VAR VALUE
 @%:@ ----------------------
 @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take
@@ -489,10 +453,6 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
   chmod +x "$as_me.lineno" ||
     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
   # original and so on.  Autoconf is especially sensitive to this).
@@ -527,16 +487,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
+    # In both cases, we have to default to `cp -p'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
+      as_ln_s='cp -p'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -pR'
+    as_ln_s='cp -p'
   fi
 else
-  as_ln_s='cp -pR'
+  as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -548,8 +508,28 @@ else
   as_mkdir_p=false
 fi
 
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in @%:@(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -581,8 +561,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='bash'
 PACKAGE_TARNAME='bash'
-PACKAGE_VERSION='4.3-maint'
-PACKAGE_STRING='bash 4.3-maint'
+PACKAGE_VERSION='4.2-maint'
+PACKAGE_STRING='bash 4.2-maint'
 PACKAGE_BUGREPORT='bug-bash@gnu.org'
 PACKAGE_URL=''
 
@@ -803,13 +783,11 @@ enable_cond_command
 enable_cond_regexp
 enable_coprocesses
 enable_debugger
-enable_direxpand_default
 enable_directory_stack
 enable_disabled_builtins
 enable_dparen_arithmetic
 enable_extended_glob
 enable_extended_glob_default
-enable_glob_asciiranges_default
 enable_help_builtin
 enable_history
 enable_job_control
@@ -1308,6 +1286,8 @@ target=$target_alias
 if test "x$host_alias" != x; then
   if test "x$build_alias" = x; then
     cross_compiling=maybe
+    $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used" >&2
   elif test "x$build_alias" != "x$host_alias"; then
     cross_compiling=yes
   fi
@@ -1393,7 +1373,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bash 4.3-maint to adapt to many kinds of systems.
+\`configure' configures bash 4.2-maint to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1458,7 +1438,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bash 4.3-maint:";;
+     short | recursive ) echo "Configuration of bash 4.2-maint:";;
    esac
   cat <<\_ACEOF
 
@@ -1486,8 +1466,6 @@ Optional Features:
   --enable-coprocesses    enable coprocess support and the coproc reserved
                           word
   --enable-debugger       enable support for bash debugger
-  --enable-direxpand-default 
-                          enable the direxpand shell option by default
   --enable-directory-stack 
                           enable builtins pushd/popd/dirs
   --enable-disabled-builtins 
@@ -1498,9 +1476,6 @@ Optional Features:
   --enable-extended-glob-default 
                           force extended pattern matching to be enabled by
                           default
-  --enable-glob-asciiranges-default 
-                          force bracket range expressions in pattern matching
-                          to use the C locale by default
   --enable-help-builtin   include the help builtin
   --enable-history        turn on command history
   --enable-job-control    enable job control features
@@ -1650,10 +1625,10 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-bash configure 4.3-maint
-generated by GNU Autoconf 2.69
+bash configure 4.2-maint
+generated by GNU Autoconf 2.68
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it.
 _ACEOF
@@ -1729,7 +1704,7 @@ $as_echo "$ac_try_echo"; } >&5
         test ! -s conftest.err
        } && test -s conftest$ac_exeext && {
         test "$cross_compiling" = yes ||
-        test -x conftest$ac_exeext
+        $as_test_x conftest$ac_exeext
        }; then :
   ac_retval=0
 else
@@ -2133,8 +2108,7 @@ int
 main ()
 {
 static int test_array @<:@1 - 2 * !(($2) >= 0)@:>@;
-test_array @<:@0@:>@ = 0;
-return test_array @<:@0@:>@;
+test_array @<:@0@:>@ = 0
 
   ;
   return 0;
@@ -2150,8 +2124,7 @@ int
 main ()
 {
 static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
-test_array @<:@0@:>@ = 0;
-return test_array @<:@0@:>@;
+test_array @<:@0@:>@ = 0
 
   ;
   return 0;
@@ -2177,8 +2150,7 @@ int
 main ()
 {
 static int test_array @<:@1 - 2 * !(($2) < 0)@:>@;
-test_array @<:@0@:>@ = 0;
-return test_array @<:@0@:>@;
+test_array @<:@0@:>@ = 0
 
   ;
   return 0;
@@ -2194,8 +2166,7 @@ int
 main ()
 {
 static int test_array @<:@1 - 2 * !(($2) >= $ac_mid)@:>@;
-test_array @<:@0@:>@ = 0;
-return test_array @<:@0@:>@;
+test_array @<:@0@:>@ = 0
 
   ;
   return 0;
@@ -2229,8 +2200,7 @@ int
 main ()
 {
 static int test_array @<:@1 - 2 * !(($2) <= $ac_mid)@:>@;
-test_array @<:@0@:>@ = 0;
-return test_array @<:@0@:>@;
+test_array @<:@0@:>@ = 0
 
   ;
   return 0;
@@ -2359,8 +2329,8 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bash $as_me 4.3-maint, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+It was created by bash $as_me 4.2-maint, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2752,7 +2722,7 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
 ac_config_headers="$ac_config_headers config.h"
 
 
-BASHVERS=4.3
+BASHVERS=4.2
 RELSTATUS=maint
 
 case "$RELSTATUS" in
@@ -2857,7 +2827,6 @@ sparc-linux*)     opt_bash_malloc=no ;;   # sparc running linux; requires ELF
 *-mirbsd*)     opt_bash_malloc=no ;;   # they claim it needs eight-bit alignment
 *-aix*)                opt_bash_malloc=no ;;   # AIX machines
 *-nextstep*)   opt_bash_malloc=no ;;   # NeXT machines running NeXTstep
-*-openstep*)   opt_bash_malloc=no ;;   # i386/Sparc/HP machines running Openstep
 *-macos*)      opt_bash_malloc=no ;;   # Apple MacOS X
 *-rhapsody*)   opt_bash_malloc=no ;;   # Apple Rhapsody (MacOS X)
 *-darwin*)     opt_bash_malloc=no ;;   # Apple Darwin (MacOS X)
@@ -2868,8 +2837,6 @@ sparc-linux*)     opt_bash_malloc=no ;;   # sparc running linux; requires ELF
 *-beos*)       opt_bash_malloc=no ;;   # they say it's suitable
 *-cygwin*)     opt_bash_malloc=no ;;   # Cygnus's CYGWIN environment
 *-opennt*|*-interix*)  opt_bash_malloc=no ;;   # Interix, now owned by Microsoft
-*-nsk*)                opt_bash_malloc=no ;;   # HP NonStop
-*-haiku*)      opt_bash_malloc=no ;;   # Haiku OS
 esac
 
 # memory scrambling on free()
@@ -3000,8 +2967,6 @@ opt_single_longdoc_strings=yes
 opt_casemod_attrs=yes
 opt_casemod_expansions=yes
 opt_extglob_default=no
-opt_dircomplete_expand_default=no
-opt_globascii_default=no
 
 opt_static_link=no
 opt_profiling=no
@@ -3022,7 +2987,6 @@ if test $opt_minimal_config = yes; then
        opt_net_redirs=no opt_progcomp=no opt_separate_help=no
        opt_multibyte=yes opt_cond_regexp=no opt_coproc=no
        opt_casemod_attrs=no opt_casemod_expansions=no opt_extglob_default=no
-       opt_globascii_default=no
 fi
 
 @%:@ Check whether --enable-alias was given.
@@ -3085,11 +3049,6 @@ if test "${enable_debugger+set}" = set; then :
   enableval=$enable_debugger; opt_debugger=$enableval
 fi
 
-@%:@ Check whether --enable-direxpand-default was given.
-if test "${enable_direxpand_default+set}" = set; then :
-  enableval=$enable_direxpand_default; opt_dircomplete_expand_default=$enableval
-fi
-
 @%:@ Check whether --enable-directory-stack was given.
 if test "${enable_directory_stack+set}" = set; then :
   enableval=$enable_directory_stack; opt_dirstack=$enableval
@@ -3115,11 +3074,6 @@ if test "${enable_extended_glob_default+set}" = set; then :
   enableval=$enable_extended_glob_default; opt_extglob_default=$enableval
 fi
 
-@%:@ Check whether --enable-glob-asciiranges-default was given.
-if test "${enable_glob_asciiranges_default+set}" = set; then :
-  enableval=$enable_glob_asciiranges_default; opt_globascii_default=$enableval
-fi
-
 @%:@ Check whether --enable-help-builtin was given.
 if test "${enable_help_builtin+set}" = set; then :
   enableval=$enable_help_builtin; opt_help=$enableval
@@ -3330,17 +3284,6 @@ fi
 if test $opt_casemod_expansions = yes; then
 $as_echo "@%:@define CASEMOD_EXPANSIONS 1" >>confdefs.h
 
-fi
-if test $opt_dircomplete_expand_default = yes; then
-$as_echo "@%:@define DIRCOMPLETE_EXPAND_DEFAULT 1" >>confdefs.h
-
-fi
-if test $opt_globascii_default = yes; then
-$as_echo "@%:@define GLOBASCII_DEFAULT 1" >>confdefs.h
-
-else
-$as_echo "@%:@define GLOBASCII_DEFAULT 0" >>confdefs.h
-
 fi
 
 if test $opt_memscramble = yes; then
@@ -3414,7 +3357,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3454,7 +3397,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3507,7 +3450,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="${ac_tool_prefix}cc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3548,7 +3491,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
        ac_prog_rejected=yes
        continue
@@ -3606,7 +3549,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -3650,7 +3593,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_CC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -4096,7 +4039,8 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <stdarg.h>
 #include <stdio.h>
-struct stat;
+#include <sys/types.h>
+#include <sys/stat.h>
 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 struct buf { int x; };
 FILE * (*rcsopen) (struct buf *, struct stat *, int);
@@ -4380,7 +4324,7 @@ do
     for ac_prog in grep ggrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
+      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
 # Check for GNU ac_path_GREP and select it if it is found.
   # Check for GNU $ac_path_GREP
 case `"$ac_path_GREP" --version 2>&1` in
@@ -4446,7 +4390,7 @@ do
     for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
+      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
 # Check for GNU ac_path_EGREP and select it if it is found.
   # Check for GNU $ac_path_EGREP
 case `"$ac_path_EGREP" --version 2>&1` in
@@ -4653,8 +4597,8 @@ else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
+#        define __EXTENSIONS__ 1
+         $ac_includes_default
 int
 main ()
 {
@@ -4882,8 +4826,6 @@ _ACEOF
 esac
 rm -rf conftest*
   fi
-
-  
 fi
 
 
@@ -5523,7 +5465,7 @@ case $as_dir/ in @%:@((
     # by default.
     for ac_prog in ginstall scoinst install; do
       for ac_exec_ext in '' $ac_executable_extensions; do
-       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+       if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
          if test $ac_prog = install &&
            grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
            # AIX install.  It has an incompatible calling convention.
@@ -5579,9 +5521,8 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
+# Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if ${ac_cv_prog_AR+:} false; then :
@@ -5596,8 +5537,8 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AR=""
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5605,6 +5546,7 @@ done
   done
 IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
 fi
 fi
 AR=$ac_cv_prog_AR
@@ -5617,60 +5559,6 @@ $as_echo "no" >&6; }
 fi
 
 
-fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_AR" = x; then
-    AR=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_ct_AR
-  fi
-else
-  AR="$ac_cv_prog_AR"
-fi
-
 test -n "$ARFLAGS" || ARFLAGS="cr"
 if test -n "$ac_tool_prefix"; then
   # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
@@ -5689,7 +5577,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5729,7 +5617,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_ac_ct_RANLIB="ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5782,7 +5670,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_YACC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -5839,12 +5727,6 @@ $as_echo "no" >&6; }
 fi
 
 
-case "$ac_cv_prog_YACC" in
-*bison*)       ;;
-*)     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: bison not available; needed to process parse.y" >&5
-$as_echo "$as_me: WARNING: bison not available; needed to process parse.y" >&2;} ;;
-esac
-
 case "$host_os" in
 opennt*|interix*)      MAKE_SHELL="$INTERIX_ROOT/bin/sh" ;;
 *)                     MAKE_SHELL=/bin/sh ;;
@@ -5921,11 +5803,11 @@ else
 int
 main ()
 {
-
+/* FIXME: Include the comments suggested by Paul. */
 #ifndef __cplusplus
-  /* Ultrix mips cc rejects this sort of thing.  */
+  /* Ultrix mips cc rejects this.  */
   typedef int charset[2];
-  const charset cs = { 0, 0 };
+  const charset cs;
   /* SunOS 4.1.1 cc rejects this.  */
   char const *const *pcpcc;
   char **ppc;
@@ -5942,9 +5824,8 @@ main ()
   ++pcpcc;
   ppc = (char**) pcpcc;
   pcpcc = (char const *const *) ppc;
-  { /* SCO 3.2v4 cc rejects this sort of thing.  */
-    char tx;
-    char *t = &tx;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
     char const *s = 0 ? (char *) 0 : (char const *) 0;
 
     *t++ = 0;
@@ -5960,10 +5841,10 @@ main ()
     iptr p = 0;
     ++p;
   }
-  { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying
+  { /* AIX XL C 1.02.0.0 rejects this saying
        "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
-    struct s { int j; const int *ap[3]; } bx;
-    struct s *b = &bx; b->j = 5;
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
   }
   { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
     const int foo = 10;
@@ -6316,8 +6197,7 @@ static int test_array @<:@1 - 2 * !((0 < ((DBL_MAX_EXP < LDBL_MAX_EXP)
                   - (LDBL_MANT_DIG < DBL_MANT_DIG)))
            && (int) LDBL_EPSILON == 0
          )@:>@;
-test_array @<:@0@:>@ = 0;
-return test_array @<:@0@:>@;
+test_array @<:@0@:>@ = 0
 
   ;
   return 0;
@@ -6373,8 +6253,7 @@ int
 main ()
 {
 static int test_array @<:@1 - 2 * !(((char) -1) < 0)@:>@;
-test_array @<:@0@:>@ = 0;
-return test_array @<:@0@:>@;
+test_array @<:@0@:>@ = 0
 
   ;
   return 0;
@@ -6592,7 +6471,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -6956,20 +6835,23 @@ else
 /* end confdefs.h.  */
 $ac_includes_default
 int
-find_stack_direction (int *addr, int depth)
+find_stack_direction ()
 {
-  int dir, dummy = 0;
-  if (! addr)
-    addr = &dummy;
-  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
-  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
-  return dir + dummy;
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
 }
 
 int
-main (int argc, char **argv)
+main ()
 {
-  return find_stack_direction (0, argc + !argv + 20) < 0;
+  return find_stack_direction () < 0;
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
@@ -8327,7 +8209,7 @@ do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
     ac_cv_prog_INTLBISON="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
@@ -9471,20 +9353,23 @@ else
 /* end confdefs.h.  */
 $ac_includes_default
 int
-find_stack_direction (int *addr, int depth)
+find_stack_direction ()
 {
-  int dir, dummy = 0;
-  if (! addr)
-    addr = &dummy;
-  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
-  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
-  return dir + dummy;
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
 }
 
 int
-main (int argc, char **argv)
+main ()
 {
-  return find_stack_direction (0, argc + !argv + 20) < 0;
+  return find_stack_direction () < 0;
 }
 _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
@@ -10026,20 +9911,6 @@ esac
 fi
 
 
-ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup"
-if test "x$ac_cv_func_strdup" = xyes; then :
-  $as_echo "@%:@define HAVE_STRDUP 1" >>confdefs.h
-
-else
-  case " $LIB@&t@OBJS " in
-  *" strdup.$ac_objext "* ) ;;
-  *) LIB@&t@OBJS="$LIB@&t@OBJS strdup.$ac_objext"
- ;;
-esac
-
-fi
-
-
 
 ac_fn_c_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#include <linux/audit.h>
 "
@@ -10903,7 +10774,7 @@ fi
 rm -f conftest.mmap conftest.txt
 
 for ac_func in __argz_count __argz_next __argz_stringify dcgettext mempcpy \
-               munmap stpcpy strcspn
+               munmap stpcpy strcspn strdup
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -11252,7 +11123,10 @@ if ${bash_cv_wcwidth_broken+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test "$cross_compiling" = yes; then :
-  bash_cv_wcwidth_broken=no
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -11279,7 +11153,7 @@ _ACEOF
 if ac_fn_c_try_run "$LINENO"; then :
   bash_cv_wcwidth_broken=yes
 else
-  bash_cv_wcwidth_broken=no
+  bash_cv_wcwdith_broken=no
 fi
 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
@@ -11288,7 +11162,7 @@ fi
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5
 $as_echo "$bash_cv_wcwidth_broken" >&6; }
-if test "$bash_cv_wcwidth_broken" = yes; then
+if test $bash_cv_wcwidth_broken = yes; then
         
 $as_echo "@%:@define WCWIDTH_BROKEN 1" >>confdefs.h
 
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t" >&5
-$as_echo_n "checking for sig_atomic_t... " >&6; }
-if ${bash_cv_type_sig_atomic_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-#if STDC_HEADERS
-#include <stdlib.h>
-#include <stddef.h>
-#endif
-#if HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#include <signal.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "sig_atomic_t" >/dev/null 2>&1; then :
-  bash_cv_type_sig_atomic_t=yes
-else
-  bash_cv_type_sig_atomic_t=no
-fi
-rm -f conftest*
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_sig_atomic_t" >&5
-$as_echo "$bash_cv_type_sig_atomic_t" >&6; }
-
-if test $bash_cv_type_sig_atomic_t = no; then
-  cat >>confdefs.h <<_ACEOF
-@%:@define sig_atomic_t int
-_ACEOF
-
-fi
-
-
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for quad_t" >&5
 $as_echo_n "checking for quad_t... " >&6; }
 if ${bash_cv_type_quad_t+:} false; then :
@@ -13437,7 +13268,7 @@ if test $bash_cv_type_socklen_t = yes; then
        fi
 if test $bash_cv_type_socklen_t = no; then
   cat >>confdefs.h <<_ACEOF
-@%:@define socklen_t unsigned int
+@%:@define socklen_t int
 _ACEOF
 
 fi
@@ -15931,7 +15762,6 @@ linux*)         LOCAL_LDFLAGS=-rdynamic          # allow dynamic loading
 powerux*)      LOCAL_LIBS="-lgen" ;;
 cygwin*)       LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
 opennt*|interix*) LOCAL_CFLAGS="-DNO_MAIN_ENV_ARG -DBROKEN_DIRENT_D_INO -D_POSIX_SOURCE -D_ALL_SOURCE -DRECYCLES_PIDS" ;;
-*openstep*)    LOCAL_CFLAGS="-D__APPLE_CC__" ;;
 esac
 
 case "${host_os}-${CC}" in
@@ -16452,16 +16282,16 @@ if (echo >conf$$.file) 2>/dev/null; then
     # ... but there are two gotchas:
     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
+    # In both cases, we have to default to `cp -p'.
     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
+      as_ln_s='cp -p'
   elif ln conf$$.file conf$$ 2>/dev/null; then
     as_ln_s=ln
   else
-    as_ln_s='cp -pR'
+    as_ln_s='cp -p'
   fi
 else
-  as_ln_s='cp -pR'
+  as_ln_s='cp -p'
 fi
 rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
 rmdir conf$$.dir 2>/dev/null
@@ -16521,16 +16351,28 @@ else
   as_mkdir_p=false
 fi
 
-
-@%:@ as_fn_executable_p FILE
-@%:@ -----------------------
-@%:@ Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} @%:@ as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+       test -d "$1/.";
+      else
+       case $1 in @%:@(
+       -*)set "./$1";;
+       esac;
+       case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@((
+       ???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
 
 # Sed expression to map a string onto a valid CPP name.
 as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
@@ -16551,8 +16393,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by bash $as_me 4.3-maint, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
+This file was extended by bash $as_me 4.2-maint, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -16617,11 +16459,11 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-bash config.status 4.3-maint
-configured by $0, generated by GNU Autoconf 2.69,
+bash config.status 4.2-maint
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
-Copyright (C) 2012 Free Software Foundation, Inc.
+Copyright (C) 2010 Free Software Foundation, Inc.
 This config.status script is free software; the Free Software Foundation
 gives unlimited permission to copy, distribute and modify it."
 
@@ -16710,7 +16552,7 @@ fi
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
   shift
   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
   CONFIG_SHELL='$SHELL'
diff --git a/autom4te.cache/output.1t b/autom4te.cache/output.1t
new file mode 100644 (file)
index 0000000..ec88dfd
--- /dev/null
@@ -0,0 +1 @@
+@%:@! /bin/sh
index 83b1d8c1f53b72ec730283d4151157f618ab39b6..683cbb60be857a70e3f8b3c0d3d2be1494b2de90 100644 (file)
                         '_AM_COND_ELSE' => 1,
                         'AC_SUBST_TRACE' => 1
                       }
-                    ], 'Autom4te::Request' ),
-             bless( [
-                      '1',
-                      1,
-                      [
-                        '/opt/local/share/autoconf'
-                      ],
-                      [
-                        '/opt/local/share/autoconf/autoconf/autoconf.m4f',
-                        'aclocal.m4',
-                        'configure.ac'
-                      ],
-                      {
-                        '_LT_AC_TAGCONFIG' => 1,
-                        'AM_PROG_F77_C_O' => 1,
-                        'AC_INIT' => 1,
-                        'm4_pattern_forbid' => 1,
-                        '_AM_COND_IF' => 1,
-                        'AC_CANONICAL_TARGET' => 1,
-                        'AC_SUBST' => 1,
-                        'AC_CONFIG_LIBOBJ_DIR' => 1,
-                        'AC_FC_SRCEXT' => 1,
-                        'AC_CANONICAL_HOST' => 1,
-                        'AC_PROG_LIBTOOL' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'AM_PATH_GUILE' => 1,
-                        'AC_CONFIG_SUBDIRS' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
-                        'LT_CONFIG_LTDL_DIR' => 1,
-                        'AC_REQUIRE_AUX_FILE' => 1,
-                        'AC_CONFIG_LINKS' => 1,
-                        'm4_sinclude' => 1,
-                        'LT_SUPPORTED_TAG' => 1,
-                        'AM_MAINTAINER_MODE' => 1,
-                        'AM_NLS' => 1,
-                        'AC_FC_PP_DEFINE' => 1,
-                        'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
-                        'AM_MAKEFILE_INCLUDE' => 1,
-                        '_m4_warn' => 1,
-                        'AM_PROG_CXX_C_O' => 1,
-                        '_AM_COND_ENDIF' => 1,
-                        '_AM_MAKEFILE_INCLUDE' => 1,
-                        'AM_ENABLE_MULTILIB' => 1,
-                        'AM_SILENT_RULES' => 1,
-                        'AM_PROG_MOC' => 1,
-                        'AC_CONFIG_FILES' => 1,
-                        'include' => 1,
-                        'LT_INIT' => 1,
-                        'AM_PROG_AR' => 1,
-                        'AM_GNU_GETTEXT' => 1,
-                        'AC_LIBSOURCE' => 1,
-                        'AM_PROG_FC_C_O' => 1,
-                        'AC_CANONICAL_BUILD' => 1,
-                        'AC_FC_FREEFORM' => 1,
-                        'AH_OUTPUT' => 1,
-                        'AC_FC_PP_SRCEXT' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'AC_CONFIG_AUX_DIR' => 1,
-                        'sinclude' => 1,
-                        'AM_PROG_CC_C_O' => 1,
-                        'm4_pattern_allow' => 1,
-                        'AM_XGETTEXT_OPTION' => 1,
-                        'AC_CANONICAL_SYSTEM' => 1,
-                        'AM_CONDITIONAL' => 1,
-                        'AC_CONFIG_HEADERS' => 1,
-                        'AC_DEFINE_TRACE_LITERAL' => 1,
-                        'AM_POT_TOOLS' => 1,
-                        'm4_include' => 1,
-                        '_AM_COND_ELSE' => 1,
-                        'AC_SUBST_TRACE' => 1
-                      }
                     ], 'Autom4te::Request' )
            );
 
index d148835261d9bcd95831704516e7db30fbe3c0d4..ff2ea4bead9a859452a7ce181a9865b013eb2ee6 100644 (file)
@@ -1,4 +1,4 @@
-m4trace:configure.ac:29: -1- AC_INIT([bash], [4.3-release], [bug-bash@gnu.org])
+m4trace:configure.ac:29: -1- AC_INIT([bash], [4.3-maint], [bug-bash@gnu.org])
 m4trace:configure.ac:29: -1- m4_pattern_forbid([^_?A[CHUM]_])
 m4trace:configure.ac:29: -1- m4_pattern_forbid([_AC_])
 m4trace:configure.ac:29: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
index ff2ea4bead9a859452a7ce181a9865b013eb2ee6..957916033093a5be7ec829c7c91045a3331741dd 100644 (file)
-m4trace:configure.ac:29: -1- AC_INIT([bash], [4.3-maint], [bug-bash@gnu.org])
-m4trace:configure.ac:29: -1- m4_pattern_forbid([^_?A[CHUM]_])
-m4trace:configure.ac:29: -1- m4_pattern_forbid([_AC_])
-m4trace:configure.ac:29: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^AS_FLAGS$])
-m4trace:configure.ac:29: -1- m4_pattern_forbid([^_?m4_])
-m4trace:configure.ac:29: -1- m4_pattern_forbid([^dnl$])
-m4trace:configure.ac:29: -1- m4_pattern_forbid([^_?AS_])
-m4trace:configure.ac:29: -1- AC_SUBST([SHELL])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([SHELL])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^SHELL$])
-m4trace:configure.ac:29: -1- AC_SUBST([PATH_SEPARATOR])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PATH_SEPARATOR$])
-m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([PACKAGE_NAME])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_NAME$])
-m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
-m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_VERSION$])
-m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([PACKAGE_STRING])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_STRING$])
-m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
-m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL],       ['AC_PACKAGE_URL'])])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([PACKAGE_URL])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_URL$])
-m4trace:configure.ac:29: -1- AC_SUBST([exec_prefix], [NONE])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([exec_prefix])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^exec_prefix$])
-m4trace:configure.ac:29: -1- AC_SUBST([prefix], [NONE])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([prefix])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^prefix$])
-m4trace:configure.ac:29: -1- AC_SUBST([program_transform_name], [s,x,x,])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([program_transform_name])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^program_transform_name$])
-m4trace:configure.ac:29: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([bindir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^bindir$])
-m4trace:configure.ac:29: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([sbindir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^sbindir$])
-m4trace:configure.ac:29: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([libexecdir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^libexecdir$])
-m4trace:configure.ac:29: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([datarootdir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^datarootdir$])
-m4trace:configure.ac:29: -1- AC_SUBST([datadir], ['${datarootdir}'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([datadir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^datadir$])
-m4trace:configure.ac:29: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([sysconfdir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^sysconfdir$])
-m4trace:configure.ac:29: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([sharedstatedir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^sharedstatedir$])
-m4trace:configure.ac:29: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([localstatedir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^localstatedir$])
-m4trace:configure.ac:29: -1- AC_SUBST([includedir], ['${prefix}/include'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([includedir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^includedir$])
-m4trace:configure.ac:29: -1- AC_SUBST([oldincludedir], ['/usr/include'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([oldincludedir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^oldincludedir$])
-m4trace:configure.ac:29: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
+m4trace:configure.in:29: -1- AC_INIT([bash], [4.2-maint], [bug-bash@gnu.org])
+m4trace:configure.in:29: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.in:29: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.in:29: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.in:29: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.in:29: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.in:29: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.in:29: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.in:29: -1- AC_SUBST([SHELL])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([SHELL])
+m4trace:configure.in:29: -1- m4_pattern_allow([^SHELL$])
+m4trace:configure.in:29: -1- AC_SUBST([PATH_SEPARATOR])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([PATH_SEPARATOR])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PATH_SEPARATOR$])
+m4trace:configure.in:29: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([PACKAGE_NAME])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.in:29: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([PACKAGE_TARNAME])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.in:29: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([PACKAGE_VERSION])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.in:29: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([PACKAGE_STRING])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.in:29: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.in:29: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL],       ['AC_PACKAGE_URL'])])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([PACKAGE_URL])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.in:29: -1- AC_SUBST([exec_prefix], [NONE])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([exec_prefix])
+m4trace:configure.in:29: -1- m4_pattern_allow([^exec_prefix$])
+m4trace:configure.in:29: -1- AC_SUBST([prefix], [NONE])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([prefix])
+m4trace:configure.in:29: -1- m4_pattern_allow([^prefix$])
+m4trace:configure.in:29: -1- AC_SUBST([program_transform_name], [s,x,x,])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([program_transform_name])
+m4trace:configure.in:29: -1- m4_pattern_allow([^program_transform_name$])
+m4trace:configure.in:29: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([bindir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^bindir$])
+m4trace:configure.in:29: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([sbindir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^sbindir$])
+m4trace:configure.in:29: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([libexecdir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^libexecdir$])
+m4trace:configure.in:29: -1- AC_SUBST([datarootdir], ['${prefix}/share'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([datarootdir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.in:29: -1- AC_SUBST([datadir], ['${datarootdir}'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([datadir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^datadir$])
+m4trace:configure.in:29: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([sysconfdir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^sysconfdir$])
+m4trace:configure.in:29: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([sharedstatedir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^sharedstatedir$])
+m4trace:configure.in:29: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([localstatedir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^localstatedir$])
+m4trace:configure.in:29: -1- AC_SUBST([includedir], ['${prefix}/include'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([includedir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^includedir$])
+m4trace:configure.in:29: -1- AC_SUBST([oldincludedir], ['/usr/include'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([oldincludedir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^oldincludedir$])
+m4trace:configure.in:29: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
                                     ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
                                     ['${datarootdir}/doc/${PACKAGE}'])])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([docdir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^docdir$])
-m4trace:configure.ac:29: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([infodir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^infodir$])
-m4trace:configure.ac:29: -1- AC_SUBST([htmldir], ['${docdir}'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([htmldir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^htmldir$])
-m4trace:configure.ac:29: -1- AC_SUBST([dvidir], ['${docdir}'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([dvidir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^dvidir$])
-m4trace:configure.ac:29: -1- AC_SUBST([pdfdir], ['${docdir}'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([pdfdir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^pdfdir$])
-m4trace:configure.ac:29: -1- AC_SUBST([psdir], ['${docdir}'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([psdir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^psdir$])
-m4trace:configure.ac:29: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([libdir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^libdir$])
-m4trace:configure.ac:29: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([localedir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^localedir$])
-m4trace:configure.ac:29: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([mandir])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^mandir$])
-m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_NAME$])
-m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([docdir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^docdir$])
+m4trace:configure.in:29: -1- AC_SUBST([infodir], ['${datarootdir}/info'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([infodir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^infodir$])
+m4trace:configure.in:29: -1- AC_SUBST([htmldir], ['${docdir}'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([htmldir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.in:29: -1- AC_SUBST([dvidir], ['${docdir}'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([dvidir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^dvidir$])
+m4trace:configure.in:29: -1- AC_SUBST([pdfdir], ['${docdir}'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([pdfdir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^pdfdir$])
+m4trace:configure.in:29: -1- AC_SUBST([psdir], ['${docdir}'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([psdir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^psdir$])
+m4trace:configure.in:29: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([libdir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^libdir$])
+m4trace:configure.in:29: -1- AC_SUBST([localedir], ['${datarootdir}/locale'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([localedir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.in:29: -1- AC_SUBST([mandir], ['${datarootdir}/man'])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([mandir])
+m4trace:configure.in:29: -1- m4_pattern_allow([^mandir$])
+m4trace:configure.in:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_NAME$])
+m4trace:configure.in:29: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
 @%:@undef PACKAGE_NAME])
-m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
-m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
+m4trace:configure.in:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_TARNAME$])
+m4trace:configure.in:29: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
 @%:@undef PACKAGE_TARNAME])
-m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_VERSION$])
-m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
+m4trace:configure.in:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_VERSION$])
+m4trace:configure.in:29: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
 @%:@undef PACKAGE_VERSION])
-m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_STRING$])
-m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
+m4trace:configure.in:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_STRING$])
+m4trace:configure.in:29: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
 @%:@undef PACKAGE_STRING])
-m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
-m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
+m4trace:configure.in:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$])
+m4trace:configure.in:29: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
 @%:@undef PACKAGE_BUGREPORT])
-m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^PACKAGE_URL$])
-m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
+m4trace:configure.in:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL])
+m4trace:configure.in:29: -1- m4_pattern_allow([^PACKAGE_URL$])
+m4trace:configure.in:29: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */
 @%:@undef PACKAGE_URL])
-m4trace:configure.ac:29: -1- AC_SUBST([DEFS])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([DEFS])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^DEFS$])
-m4trace:configure.ac:29: -1- AC_SUBST([ECHO_C])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([ECHO_C])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^ECHO_C$])
-m4trace:configure.ac:29: -1- AC_SUBST([ECHO_N])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([ECHO_N])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^ECHO_N$])
-m4trace:configure.ac:29: -1- AC_SUBST([ECHO_T])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([ECHO_T])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^ECHO_T$])
-m4trace:configure.ac:29: -1- AC_SUBST([LIBS])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([LIBS])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^LIBS$])
-m4trace:configure.ac:29: -1- AC_SUBST([build_alias])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([build_alias])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^build_alias$])
-m4trace:configure.ac:29: -1- AC_SUBST([host_alias])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([host_alias])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^host_alias$])
-m4trace:configure.ac:29: -1- AC_SUBST([target_alias])
-m4trace:configure.ac:29: -1- AC_SUBST_TRACE([target_alias])
-m4trace:configure.ac:29: -1- m4_pattern_allow([^target_alias$])
-m4trace:configure.ac:36: -1- AC_CONFIG_AUX_DIR([./support])
-m4trace:configure.ac:37: -1- AC_CONFIG_HEADERS([config.h])
-m4trace:configure.ac:51: -1- AC_CANONICAL_HOST
-m4trace:configure.ac:51: -1- AC_CANONICAL_BUILD
-m4trace:configure.ac:51: -1- AC_REQUIRE_AUX_FILE([config.sub])
-m4trace:configure.ac:51: -1- AC_REQUIRE_AUX_FILE([config.guess])
-m4trace:configure.ac:51: -1- AC_SUBST([build], [$ac_cv_build])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([build])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^build$])
-m4trace:configure.ac:51: -1- AC_SUBST([build_cpu], [$[1]])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([build_cpu])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^build_cpu$])
-m4trace:configure.ac:51: -1- AC_SUBST([build_vendor], [$[2]])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([build_vendor])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^build_vendor$])
-m4trace:configure.ac:51: -1- AC_SUBST([build_os])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([build_os])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^build_os$])
-m4trace:configure.ac:51: -1- AC_SUBST([host], [$ac_cv_host])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([host])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^host$])
-m4trace:configure.ac:51: -1- AC_SUBST([host_cpu], [$[1]])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([host_cpu])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^host_cpu$])
-m4trace:configure.ac:51: -1- AC_SUBST([host_vendor], [$[2]])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([host_vendor])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^host_vendor$])
-m4trace:configure.ac:51: -1- AC_SUBST([host_os])
-m4trace:configure.ac:51: -1- AC_SUBST_TRACE([host_os])
-m4trace:configure.ac:51: -1- m4_pattern_allow([^host_os$])
-m4trace:configure.ac:52: -1- AC_CANONICAL_BUILD
-m4trace:configure.ac:107: -1- AC_SUBST([DEBUGGER_START_FILE])
-m4trace:configure.ac:107: -1- AC_SUBST_TRACE([DEBUGGER_START_FILE])
-m4trace:configure.ac:107: -1- m4_pattern_allow([^DEBUGGER_START_FILE$])
-m4trace:configure.ac:111: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:111: the top level])
-m4trace:configure.ac:112: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:112: the top level])
-m4trace:configure.ac:113: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:113: the top level])
-m4trace:configure.ac:114: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:114: the top level])
-m4trace:configure.ac:115: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:115: the top level])
-m4trace:configure.ac:116: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:116: the top level])
-m4trace:configure.ac:117: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:117: the top level])
-m4trace:configure.ac:128: -1- AC_DEFINE_TRACE_LITERAL([USING_BASH_MALLOC])
-m4trace:configure.ac:128: -1- m4_pattern_allow([^USING_BASH_MALLOC$])
-m4trace:configure.ac:138: -1- AC_DEFINE_TRACE_LITERAL([DISABLE_MALLOC_WRAPPERS])
-m4trace:configure.ac:138: -1- m4_pattern_allow([^DISABLE_MALLOC_WRAPPERS$])
-m4trace:configure.ac:148: -1- AC_DEFINE_TRACE_LITERAL([AFS])
-m4trace:configure.ac:148: -1- m4_pattern_allow([^AFS$])
-m4trace:configure.ac:202: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:202: the top level])
-m4trace:configure.ac:219: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:219: the top level])
-m4trace:configure.ac:220: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:220: the top level])
-m4trace:configure.ac:221: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:221: the top level])
-m4trace:configure.ac:222: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:222: the top level])
-m4trace:configure.ac:223: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:223: the top level])
-m4trace:configure.ac:224: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:224: the top level])
-m4trace:configure.ac:225: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:225: the top level])
-m4trace:configure.ac:226: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:226: the top level])
-m4trace:configure.ac:227: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:227: the top level])
-m4trace:configure.ac:228: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:228: the top level])
-m4trace:configure.ac:229: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:229: the top level])
-m4trace:configure.ac:230: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:230: the top level])
-m4trace:configure.ac:231: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:231: the top level])
-m4trace:configure.ac:232: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:232: the top level])
-m4trace:configure.ac:233: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:233: the top level])
-m4trace:configure.ac:234: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:234: the top level])
-m4trace:configure.ac:235: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:235: the top level])
-m4trace:configure.ac:236: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:236: the top level])
-m4trace:configure.ac:237: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:237: the top level])
-m4trace:configure.ac:238: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:238: the top level])
-m4trace:configure.ac:239: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:239: the top level])
-m4trace:configure.ac:240: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:240: the top level])
-m4trace:configure.ac:241: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:241: the top level])
-m4trace:configure.ac:242: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:242: the top level])
-m4trace:configure.ac:243: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:243: the top level])
-m4trace:configure.ac:244: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:244: the top level])
-m4trace:configure.ac:245: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:245: the top level])
-m4trace:configure.ac:246: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:246: the top level])
-m4trace:configure.ac:247: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:247: the top level])
-m4trace:configure.ac:248: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:248: the top level])
-m4trace:configure.ac:249: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:249: the top level])
-m4trace:configure.ac:250: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:250: the top level])
-m4trace:configure.ac:251: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:251: the top level])
-m4trace:configure.ac:252: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:252: the top level])
-m4trace:configure.ac:253: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:253: the top level])
-m4trace:configure.ac:256: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:256: the top level])
-m4trace:configure.ac:257: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:257: the top level])
-m4trace:configure.ac:258: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:207: AC_HELP_STRING is expanded from...
-configure.ac:258: the top level])
-m4trace:configure.ac:261: -1- AC_SUBST([CC_FOR_BUILD])
-m4trace:configure.ac:261: -1- AC_SUBST_TRACE([CC_FOR_BUILD])
-m4trace:configure.ac:261: -1- m4_pattern_allow([^CC_FOR_BUILD$])
-m4trace:configure.ac:262: -1- AC_SUBST([CFLAGS_FOR_BUILD])
-m4trace:configure.ac:262: -1- AC_SUBST_TRACE([CFLAGS_FOR_BUILD])
-m4trace:configure.ac:262: -1- m4_pattern_allow([^CFLAGS_FOR_BUILD$])
-m4trace:configure.ac:263: -1- AC_SUBST([LDFLAGS_FOR_BUILD])
-m4trace:configure.ac:263: -1- AC_SUBST_TRACE([LDFLAGS_FOR_BUILD])
-m4trace:configure.ac:263: -1- m4_pattern_allow([^LDFLAGS_FOR_BUILD$])
-m4trace:configure.ac:264: -1- AC_SUBST([CPPFLAGS_FOR_BUILD])
-m4trace:configure.ac:264: -1- AC_SUBST_TRACE([CPPFLAGS_FOR_BUILD])
-m4trace:configure.ac:264: -1- m4_pattern_allow([^CPPFLAGS_FOR_BUILD$])
-m4trace:configure.ac:273: -1- AC_DEFINE_TRACE_LITERAL([ALIAS])
-m4trace:configure.ac:273: -1- m4_pattern_allow([^ALIAS$])
-m4trace:configure.ac:276: -1- AC_DEFINE_TRACE_LITERAL([PUSHD_AND_POPD])
-m4trace:configure.ac:276: -1- m4_pattern_allow([^PUSHD_AND_POPD$])
-m4trace:configure.ac:279: -1- AC_DEFINE_TRACE_LITERAL([RESTRICTED_SHELL])
-m4trace:configure.ac:279: -1- m4_pattern_allow([^RESTRICTED_SHELL$])
-m4trace:configure.ac:282: -1- AC_DEFINE_TRACE_LITERAL([PROCESS_SUBSTITUTION])
-m4trace:configure.ac:282: -1- m4_pattern_allow([^PROCESS_SUBSTITUTION$])
-m4trace:configure.ac:285: -1- AC_DEFINE_TRACE_LITERAL([PROMPT_STRING_DECODE])
-m4trace:configure.ac:285: -1- m4_pattern_allow([^PROMPT_STRING_DECODE$])
-m4trace:configure.ac:288: -1- AC_DEFINE_TRACE_LITERAL([SELECT_COMMAND])
-m4trace:configure.ac:288: -1- m4_pattern_allow([^SELECT_COMMAND$])
-m4trace:configure.ac:291: -1- AC_DEFINE_TRACE_LITERAL([HELP_BUILTIN])
-m4trace:configure.ac:291: -1- m4_pattern_allow([^HELP_BUILTIN$])
-m4trace:configure.ac:294: -1- AC_DEFINE_TRACE_LITERAL([ARRAY_VARS])
-m4trace:configure.ac:294: -1- m4_pattern_allow([^ARRAY_VARS$])
-m4trace:configure.ac:297: -1- AC_DEFINE_TRACE_LITERAL([DPAREN_ARITHMETIC])
-m4trace:configure.ac:297: -1- m4_pattern_allow([^DPAREN_ARITHMETIC$])
-m4trace:configure.ac:300: -1- AC_DEFINE_TRACE_LITERAL([BRACE_EXPANSION])
-m4trace:configure.ac:300: -1- m4_pattern_allow([^BRACE_EXPANSION$])
-m4trace:configure.ac:303: -1- AC_DEFINE_TRACE_LITERAL([DISABLED_BUILTINS])
-m4trace:configure.ac:303: -1- m4_pattern_allow([^DISABLED_BUILTINS$])
-m4trace:configure.ac:306: -1- AC_DEFINE_TRACE_LITERAL([COMMAND_TIMING])
-m4trace:configure.ac:306: -1- m4_pattern_allow([^COMMAND_TIMING$])
-m4trace:configure.ac:309: -1- AC_DEFINE_TRACE_LITERAL([DEFAULT_ECHO_TO_XPG])
-m4trace:configure.ac:309: -1- m4_pattern_allow([^DEFAULT_ECHO_TO_XPG$])
-m4trace:configure.ac:312: -1- AC_DEFINE_TRACE_LITERAL([STRICT_POSIX])
-m4trace:configure.ac:312: -1- m4_pattern_allow([^STRICT_POSIX$])
-m4trace:configure.ac:315: -1- AC_DEFINE_TRACE_LITERAL([EXTENDED_GLOB])
-m4trace:configure.ac:315: -1- m4_pattern_allow([^EXTENDED_GLOB$])
-m4trace:configure.ac:318: -1- AC_DEFINE_TRACE_LITERAL([EXTGLOB_DEFAULT])
-m4trace:configure.ac:318: -1- m4_pattern_allow([^EXTGLOB_DEFAULT$])
-m4trace:configure.ac:320: -1- AC_DEFINE_TRACE_LITERAL([EXTGLOB_DEFAULT])
-m4trace:configure.ac:320: -1- m4_pattern_allow([^EXTGLOB_DEFAULT$])
-m4trace:configure.ac:323: -1- AC_DEFINE_TRACE_LITERAL([COND_COMMAND])
-m4trace:configure.ac:323: -1- m4_pattern_allow([^COND_COMMAND$])
-m4trace:configure.ac:326: -1- AC_DEFINE_TRACE_LITERAL([COND_REGEXP])
-m4trace:configure.ac:326: -1- m4_pattern_allow([^COND_REGEXP$])
-m4trace:configure.ac:329: -1- AC_DEFINE_TRACE_LITERAL([COPROCESS_SUPPORT])
-m4trace:configure.ac:329: -1- m4_pattern_allow([^COPROCESS_SUPPORT$])
-m4trace:configure.ac:332: -1- AC_DEFINE_TRACE_LITERAL([ARITH_FOR_COMMAND])
-m4trace:configure.ac:332: -1- m4_pattern_allow([^ARITH_FOR_COMMAND$])
-m4trace:configure.ac:335: -1- AC_DEFINE_TRACE_LITERAL([NETWORK_REDIRECTIONS])
-m4trace:configure.ac:335: -1- m4_pattern_allow([^NETWORK_REDIRECTIONS$])
-m4trace:configure.ac:338: -1- AC_DEFINE_TRACE_LITERAL([PROGRAMMABLE_COMPLETION])
-m4trace:configure.ac:338: -1- m4_pattern_allow([^PROGRAMMABLE_COMPLETION$])
-m4trace:configure.ac:341: -1- AC_DEFINE_TRACE_LITERAL([NO_MULTIBYTE_SUPPORT])
-m4trace:configure.ac:341: -1- m4_pattern_allow([^NO_MULTIBYTE_SUPPORT$])
-m4trace:configure.ac:344: -1- AC_DEFINE_TRACE_LITERAL([DEBUGGER])
-m4trace:configure.ac:344: -1- m4_pattern_allow([^DEBUGGER$])
-m4trace:configure.ac:347: -1- AC_DEFINE_TRACE_LITERAL([CASEMOD_ATTRS])
-m4trace:configure.ac:347: -1- m4_pattern_allow([^CASEMOD_ATTRS$])
-m4trace:configure.ac:350: -1- AC_DEFINE_TRACE_LITERAL([CASEMOD_EXPANSIONS])
-m4trace:configure.ac:350: -1- m4_pattern_allow([^CASEMOD_EXPANSIONS$])
-m4trace:configure.ac:353: -1- AC_DEFINE_TRACE_LITERAL([DIRCOMPLETE_EXPAND_DEFAULT])
-m4trace:configure.ac:353: -1- m4_pattern_allow([^DIRCOMPLETE_EXPAND_DEFAULT$])
-m4trace:configure.ac:356: -1- AC_DEFINE_TRACE_LITERAL([GLOBASCII_DEFAULT])
-m4trace:configure.ac:356: -1- m4_pattern_allow([^GLOBASCII_DEFAULT$])
-m4trace:configure.ac:358: -1- AC_DEFINE_TRACE_LITERAL([GLOBASCII_DEFAULT])
-m4trace:configure.ac:358: -1- m4_pattern_allow([^GLOBASCII_DEFAULT$])
-m4trace:configure.ac:362: -1- AC_DEFINE_TRACE_LITERAL([MEMSCRAMBLE])
-m4trace:configure.ac:362: -1- m4_pattern_allow([^MEMSCRAMBLE$])
-m4trace:configure.ac:388: -1- AC_SUBST([TESTSCRIPT])
-m4trace:configure.ac:388: -1- AC_SUBST_TRACE([TESTSCRIPT])
-m4trace:configure.ac:388: -1- m4_pattern_allow([^TESTSCRIPT$])
-m4trace:configure.ac:389: -1- AC_SUBST([PURIFY])
-m4trace:configure.ac:389: -1- AC_SUBST_TRACE([PURIFY])
-m4trace:configure.ac:389: -1- m4_pattern_allow([^PURIFY$])
-m4trace:configure.ac:390: -1- AC_SUBST([MALLOC_TARGET])
-m4trace:configure.ac:390: -1- AC_SUBST_TRACE([MALLOC_TARGET])
-m4trace:configure.ac:390: -1- m4_pattern_allow([^MALLOC_TARGET$])
-m4trace:configure.ac:391: -1- AC_SUBST([MALLOC_SRC])
-m4trace:configure.ac:391: -1- AC_SUBST_TRACE([MALLOC_SRC])
-m4trace:configure.ac:391: -1- m4_pattern_allow([^MALLOC_SRC$])
-m4trace:configure.ac:393: -1- AC_SUBST([MALLOC_LIB])
-m4trace:configure.ac:393: -1- AC_SUBST_TRACE([MALLOC_LIB])
-m4trace:configure.ac:393: -1- m4_pattern_allow([^MALLOC_LIB$])
-m4trace:configure.ac:394: -1- AC_SUBST([MALLOC_LIBRARY])
-m4trace:configure.ac:394: -1- AC_SUBST_TRACE([MALLOC_LIBRARY])
-m4trace:configure.ac:394: -1- m4_pattern_allow([^MALLOC_LIBRARY$])
-m4trace:configure.ac:395: -1- AC_SUBST([MALLOC_LDFLAGS])
-m4trace:configure.ac:395: -1- AC_SUBST_TRACE([MALLOC_LDFLAGS])
-m4trace:configure.ac:395: -1- m4_pattern_allow([^MALLOC_LDFLAGS$])
-m4trace:configure.ac:396: -1- AC_SUBST([MALLOC_DEP])
-m4trace:configure.ac:396: -1- AC_SUBST_TRACE([MALLOC_DEP])
-m4trace:configure.ac:396: -1- m4_pattern_allow([^MALLOC_DEP$])
-m4trace:configure.ac:398: -1- AC_SUBST([htmldir])
-m4trace:configure.ac:398: -1- AC_SUBST_TRACE([htmldir])
-m4trace:configure.ac:398: -1- m4_pattern_allow([^htmldir$])
-m4trace:configure.ac:400: -1- AC_SUBST([HELPDIR])
-m4trace:configure.ac:400: -1- AC_SUBST_TRACE([HELPDIR])
-m4trace:configure.ac:400: -1- m4_pattern_allow([^HELPDIR$])
-m4trace:configure.ac:401: -1- AC_SUBST([HELPDIRDEFINE])
-m4trace:configure.ac:401: -1- AC_SUBST_TRACE([HELPDIRDEFINE])
-m4trace:configure.ac:401: -1- m4_pattern_allow([^HELPDIRDEFINE$])
-m4trace:configure.ac:402: -1- AC_SUBST([HELPINSTALL])
-m4trace:configure.ac:402: -1- AC_SUBST_TRACE([HELPINSTALL])
-m4trace:configure.ac:402: -1- m4_pattern_allow([^HELPINSTALL$])
-m4trace:configure.ac:403: -1- AC_SUBST([HELPFILES_TARGET])
-m4trace:configure.ac:403: -1- AC_SUBST_TRACE([HELPFILES_TARGET])
-m4trace:configure.ac:403: -1- m4_pattern_allow([^HELPFILES_TARGET$])
-m4trace:configure.ac:404: -1- AC_SUBST([HELPSTRINGS])
-m4trace:configure.ac:404: -1- AC_SUBST_TRACE([HELPSTRINGS])
-m4trace:configure.ac:404: -1- m4_pattern_allow([^HELPSTRINGS$])
-m4trace:configure.ac:413: -1- AC_SUBST([CC])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([CC])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^CC$])
-m4trace:configure.ac:413: -1- AC_SUBST([CFLAGS])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([CFLAGS])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^CFLAGS$])
-m4trace:configure.ac:413: -1- AC_SUBST([LDFLAGS])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([LDFLAGS])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^LDFLAGS$])
-m4trace:configure.ac:413: -1- AC_SUBST([LIBS])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([LIBS])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^LIBS$])
-m4trace:configure.ac:413: -1- AC_SUBST([CPPFLAGS])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([CPPFLAGS])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^CPPFLAGS$])
-m4trace:configure.ac:413: -1- AC_SUBST([CC])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([CC])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^CC$])
-m4trace:configure.ac:413: -1- AC_SUBST([CC])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([CC])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^CC$])
-m4trace:configure.ac:413: -1- AC_SUBST([CC])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([CC])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^CC$])
-m4trace:configure.ac:413: -1- AC_SUBST([CC])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([CC])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^CC$])
-m4trace:configure.ac:413: -1- AC_SUBST([ac_ct_CC])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([ac_ct_CC])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^ac_ct_CC$])
-m4trace:configure.ac:413: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([EXEEXT])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^EXEEXT$])
-m4trace:configure.ac:413: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
-m4trace:configure.ac:413: -1- AC_SUBST_TRACE([OBJEXT])
-m4trace:configure.ac:413: -1- m4_pattern_allow([^OBJEXT$])
-m4trace:configure.ac:417: -1- _m4_warn([obsolete], [The macro `AC_MINIX' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/specific.m4:441: AC_MINIX is expanded from...
-configure.ac:417: the top level])
-m4trace:configure.ac:417: -1- AC_SUBST([CPP])
-m4trace:configure.ac:417: -1- AC_SUBST_TRACE([CPP])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^CPP$])
-m4trace:configure.ac:417: -1- AC_SUBST([CPPFLAGS])
-m4trace:configure.ac:417: -1- AC_SUBST_TRACE([CPPFLAGS])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^CPPFLAGS$])
-m4trace:configure.ac:417: -1- AC_SUBST([CPP])
-m4trace:configure.ac:417: -1- AC_SUBST_TRACE([CPP])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^CPP$])
-m4trace:configure.ac:417: -1- AC_SUBST([GREP])
-m4trace:configure.ac:417: -1- AC_SUBST_TRACE([GREP])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^GREP$])
-m4trace:configure.ac:417: -1- AC_SUBST([EGREP])
-m4trace:configure.ac:417: -1- AC_SUBST_TRACE([EGREP])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^EGREP$])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^STDC_HEADERS$])
-m4trace:configure.ac:417: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
+m4trace:configure.in:29: -1- AC_SUBST([DEFS])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([DEFS])
+m4trace:configure.in:29: -1- m4_pattern_allow([^DEFS$])
+m4trace:configure.in:29: -1- AC_SUBST([ECHO_C])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([ECHO_C])
+m4trace:configure.in:29: -1- m4_pattern_allow([^ECHO_C$])
+m4trace:configure.in:29: -1- AC_SUBST([ECHO_N])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([ECHO_N])
+m4trace:configure.in:29: -1- m4_pattern_allow([^ECHO_N$])
+m4trace:configure.in:29: -1- AC_SUBST([ECHO_T])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([ECHO_T])
+m4trace:configure.in:29: -1- m4_pattern_allow([^ECHO_T$])
+m4trace:configure.in:29: -1- AC_SUBST([LIBS])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.in:29: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.in:29: -1- AC_SUBST([build_alias])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([build_alias])
+m4trace:configure.in:29: -1- m4_pattern_allow([^build_alias$])
+m4trace:configure.in:29: -1- AC_SUBST([host_alias])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([host_alias])
+m4trace:configure.in:29: -1- m4_pattern_allow([^host_alias$])
+m4trace:configure.in:29: -1- AC_SUBST([target_alias])
+m4trace:configure.in:29: -1- AC_SUBST_TRACE([target_alias])
+m4trace:configure.in:29: -1- m4_pattern_allow([^target_alias$])
+m4trace:configure.in:36: -1- AC_CONFIG_AUX_DIR([./support])
+m4trace:configure.in:37: -1- AC_CONFIG_HEADERS([config.h])
+m4trace:configure.in:51: -1- AC_CANONICAL_HOST
+m4trace:configure.in:51: -1- AC_CANONICAL_BUILD
+m4trace:configure.in:51: -1- AC_REQUIRE_AUX_FILE([config.sub])
+m4trace:configure.in:51: -1- AC_REQUIRE_AUX_FILE([config.guess])
+m4trace:configure.in:51: -1- AC_SUBST([build], [$ac_cv_build])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([build])
+m4trace:configure.in:51: -1- m4_pattern_allow([^build$])
+m4trace:configure.in:51: -1- AC_SUBST([build_cpu], [$[1]])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([build_cpu])
+m4trace:configure.in:51: -1- m4_pattern_allow([^build_cpu$])
+m4trace:configure.in:51: -1- AC_SUBST([build_vendor], [$[2]])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([build_vendor])
+m4trace:configure.in:51: -1- m4_pattern_allow([^build_vendor$])
+m4trace:configure.in:51: -1- AC_SUBST([build_os])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([build_os])
+m4trace:configure.in:51: -1- m4_pattern_allow([^build_os$])
+m4trace:configure.in:51: -1- AC_SUBST([host], [$ac_cv_host])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([host])
+m4trace:configure.in:51: -1- m4_pattern_allow([^host$])
+m4trace:configure.in:51: -1- AC_SUBST([host_cpu], [$[1]])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([host_cpu])
+m4trace:configure.in:51: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.in:51: -1- AC_SUBST([host_vendor], [$[2]])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([host_vendor])
+m4trace:configure.in:51: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.in:51: -1- AC_SUBST([host_os])
+m4trace:configure.in:51: -1- AC_SUBST_TRACE([host_os])
+m4trace:configure.in:51: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.in:52: -1- AC_CANONICAL_BUILD
+m4trace:configure.in:104: -1- AC_SUBST([DEBUGGER_START_FILE])
+m4trace:configure.in:104: -1- AC_SUBST_TRACE([DEBUGGER_START_FILE])
+m4trace:configure.in:104: -1- m4_pattern_allow([^DEBUGGER_START_FILE$])
+m4trace:configure.in:108: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:108: the top level])
+m4trace:configure.in:109: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:109: the top level])
+m4trace:configure.in:110: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:110: the top level])
+m4trace:configure.in:111: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:111: the top level])
+m4trace:configure.in:112: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:112: the top level])
+m4trace:configure.in:113: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:113: the top level])
+m4trace:configure.in:114: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:114: the top level])
+m4trace:configure.in:125: -1- AC_DEFINE_TRACE_LITERAL([USING_BASH_MALLOC])
+m4trace:configure.in:125: -1- m4_pattern_allow([^USING_BASH_MALLOC$])
+m4trace:configure.in:135: -1- AC_DEFINE_TRACE_LITERAL([DISABLE_MALLOC_WRAPPERS])
+m4trace:configure.in:135: -1- m4_pattern_allow([^DISABLE_MALLOC_WRAPPERS$])
+m4trace:configure.in:145: -1- AC_DEFINE_TRACE_LITERAL([AFS])
+m4trace:configure.in:145: -1- m4_pattern_allow([^AFS$])
+m4trace:configure.in:197: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:197: the top level])
+m4trace:configure.in:213: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:213: the top level])
+m4trace:configure.in:214: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:214: the top level])
+m4trace:configure.in:215: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:215: the top level])
+m4trace:configure.in:216: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:216: the top level])
+m4trace:configure.in:217: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:217: the top level])
+m4trace:configure.in:218: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:218: the top level])
+m4trace:configure.in:219: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:219: the top level])
+m4trace:configure.in:220: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:220: the top level])
+m4trace:configure.in:221: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:221: the top level])
+m4trace:configure.in:222: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:222: the top level])
+m4trace:configure.in:223: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:223: the top level])
+m4trace:configure.in:224: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:224: the top level])
+m4trace:configure.in:225: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:225: the top level])
+m4trace:configure.in:226: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:226: the top level])
+m4trace:configure.in:227: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:227: the top level])
+m4trace:configure.in:228: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:228: the top level])
+m4trace:configure.in:229: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:229: the top level])
+m4trace:configure.in:230: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:230: the top level])
+m4trace:configure.in:231: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:231: the top level])
+m4trace:configure.in:232: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:232: the top level])
+m4trace:configure.in:233: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:233: the top level])
+m4trace:configure.in:234: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:234: the top level])
+m4trace:configure.in:235: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:235: the top level])
+m4trace:configure.in:236: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:236: the top level])
+m4trace:configure.in:237: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:237: the top level])
+m4trace:configure.in:238: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:238: the top level])
+m4trace:configure.in:239: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:239: the top level])
+m4trace:configure.in:240: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:240: the top level])
+m4trace:configure.in:241: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:241: the top level])
+m4trace:configure.in:242: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:242: the top level])
+m4trace:configure.in:243: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:243: the top level])
+m4trace:configure.in:244: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:244: the top level])
+m4trace:configure.in:245: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:245: the top level])
+m4trace:configure.in:248: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:248: the top level])
+m4trace:configure.in:249: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:249: the top level])
+m4trace:configure.in:250: -2- _m4_warn([obsolete], [The macro `AC_HELP_STRING' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:209: AC_HELP_STRING is expanded from...
+configure.in:250: the top level])
+m4trace:configure.in:253: -1- AC_SUBST([CC_FOR_BUILD])
+m4trace:configure.in:253: -1- AC_SUBST_TRACE([CC_FOR_BUILD])
+m4trace:configure.in:253: -1- m4_pattern_allow([^CC_FOR_BUILD$])
+m4trace:configure.in:254: -1- AC_SUBST([CFLAGS_FOR_BUILD])
+m4trace:configure.in:254: -1- AC_SUBST_TRACE([CFLAGS_FOR_BUILD])
+m4trace:configure.in:254: -1- m4_pattern_allow([^CFLAGS_FOR_BUILD$])
+m4trace:configure.in:255: -1- AC_SUBST([LDFLAGS_FOR_BUILD])
+m4trace:configure.in:255: -1- AC_SUBST_TRACE([LDFLAGS_FOR_BUILD])
+m4trace:configure.in:255: -1- m4_pattern_allow([^LDFLAGS_FOR_BUILD$])
+m4trace:configure.in:256: -1- AC_SUBST([CPPFLAGS_FOR_BUILD])
+m4trace:configure.in:256: -1- AC_SUBST_TRACE([CPPFLAGS_FOR_BUILD])
+m4trace:configure.in:256: -1- m4_pattern_allow([^CPPFLAGS_FOR_BUILD$])
+m4trace:configure.in:265: -1- AC_DEFINE_TRACE_LITERAL([ALIAS])
+m4trace:configure.in:265: -1- m4_pattern_allow([^ALIAS$])
+m4trace:configure.in:268: -1- AC_DEFINE_TRACE_LITERAL([PUSHD_AND_POPD])
+m4trace:configure.in:268: -1- m4_pattern_allow([^PUSHD_AND_POPD$])
+m4trace:configure.in:271: -1- AC_DEFINE_TRACE_LITERAL([RESTRICTED_SHELL])
+m4trace:configure.in:271: -1- m4_pattern_allow([^RESTRICTED_SHELL$])
+m4trace:configure.in:274: -1- AC_DEFINE_TRACE_LITERAL([PROCESS_SUBSTITUTION])
+m4trace:configure.in:274: -1- m4_pattern_allow([^PROCESS_SUBSTITUTION$])
+m4trace:configure.in:277: -1- AC_DEFINE_TRACE_LITERAL([PROMPT_STRING_DECODE])
+m4trace:configure.in:277: -1- m4_pattern_allow([^PROMPT_STRING_DECODE$])
+m4trace:configure.in:280: -1- AC_DEFINE_TRACE_LITERAL([SELECT_COMMAND])
+m4trace:configure.in:280: -1- m4_pattern_allow([^SELECT_COMMAND$])
+m4trace:configure.in:283: -1- AC_DEFINE_TRACE_LITERAL([HELP_BUILTIN])
+m4trace:configure.in:283: -1- m4_pattern_allow([^HELP_BUILTIN$])
+m4trace:configure.in:286: -1- AC_DEFINE_TRACE_LITERAL([ARRAY_VARS])
+m4trace:configure.in:286: -1- m4_pattern_allow([^ARRAY_VARS$])
+m4trace:configure.in:289: -1- AC_DEFINE_TRACE_LITERAL([DPAREN_ARITHMETIC])
+m4trace:configure.in:289: -1- m4_pattern_allow([^DPAREN_ARITHMETIC$])
+m4trace:configure.in:292: -1- AC_DEFINE_TRACE_LITERAL([BRACE_EXPANSION])
+m4trace:configure.in:292: -1- m4_pattern_allow([^BRACE_EXPANSION$])
+m4trace:configure.in:295: -1- AC_DEFINE_TRACE_LITERAL([DISABLED_BUILTINS])
+m4trace:configure.in:295: -1- m4_pattern_allow([^DISABLED_BUILTINS$])
+m4trace:configure.in:298: -1- AC_DEFINE_TRACE_LITERAL([COMMAND_TIMING])
+m4trace:configure.in:298: -1- m4_pattern_allow([^COMMAND_TIMING$])
+m4trace:configure.in:301: -1- AC_DEFINE_TRACE_LITERAL([DEFAULT_ECHO_TO_XPG])
+m4trace:configure.in:301: -1- m4_pattern_allow([^DEFAULT_ECHO_TO_XPG$])
+m4trace:configure.in:304: -1- AC_DEFINE_TRACE_LITERAL([STRICT_POSIX])
+m4trace:configure.in:304: -1- m4_pattern_allow([^STRICT_POSIX$])
+m4trace:configure.in:307: -1- AC_DEFINE_TRACE_LITERAL([EXTENDED_GLOB])
+m4trace:configure.in:307: -1- m4_pattern_allow([^EXTENDED_GLOB$])
+m4trace:configure.in:310: -1- AC_DEFINE_TRACE_LITERAL([EXTGLOB_DEFAULT])
+m4trace:configure.in:310: -1- m4_pattern_allow([^EXTGLOB_DEFAULT$])
+m4trace:configure.in:312: -1- AC_DEFINE_TRACE_LITERAL([EXTGLOB_DEFAULT])
+m4trace:configure.in:312: -1- m4_pattern_allow([^EXTGLOB_DEFAULT$])
+m4trace:configure.in:315: -1- AC_DEFINE_TRACE_LITERAL([COND_COMMAND])
+m4trace:configure.in:315: -1- m4_pattern_allow([^COND_COMMAND$])
+m4trace:configure.in:318: -1- AC_DEFINE_TRACE_LITERAL([COND_REGEXP])
+m4trace:configure.in:318: -1- m4_pattern_allow([^COND_REGEXP$])
+m4trace:configure.in:321: -1- AC_DEFINE_TRACE_LITERAL([COPROCESS_SUPPORT])
+m4trace:configure.in:321: -1- m4_pattern_allow([^COPROCESS_SUPPORT$])
+m4trace:configure.in:324: -1- AC_DEFINE_TRACE_LITERAL([ARITH_FOR_COMMAND])
+m4trace:configure.in:324: -1- m4_pattern_allow([^ARITH_FOR_COMMAND$])
+m4trace:configure.in:327: -1- AC_DEFINE_TRACE_LITERAL([NETWORK_REDIRECTIONS])
+m4trace:configure.in:327: -1- m4_pattern_allow([^NETWORK_REDIRECTIONS$])
+m4trace:configure.in:330: -1- AC_DEFINE_TRACE_LITERAL([PROGRAMMABLE_COMPLETION])
+m4trace:configure.in:330: -1- m4_pattern_allow([^PROGRAMMABLE_COMPLETION$])
+m4trace:configure.in:333: -1- AC_DEFINE_TRACE_LITERAL([NO_MULTIBYTE_SUPPORT])
+m4trace:configure.in:333: -1- m4_pattern_allow([^NO_MULTIBYTE_SUPPORT$])
+m4trace:configure.in:336: -1- AC_DEFINE_TRACE_LITERAL([DEBUGGER])
+m4trace:configure.in:336: -1- m4_pattern_allow([^DEBUGGER$])
+m4trace:configure.in:339: -1- AC_DEFINE_TRACE_LITERAL([CASEMOD_ATTRS])
+m4trace:configure.in:339: -1- m4_pattern_allow([^CASEMOD_ATTRS$])
+m4trace:configure.in:342: -1- AC_DEFINE_TRACE_LITERAL([CASEMOD_EXPANSIONS])
+m4trace:configure.in:342: -1- m4_pattern_allow([^CASEMOD_EXPANSIONS$])
+m4trace:configure.in:346: -1- AC_DEFINE_TRACE_LITERAL([MEMSCRAMBLE])
+m4trace:configure.in:346: -1- m4_pattern_allow([^MEMSCRAMBLE$])
+m4trace:configure.in:372: -1- AC_SUBST([TESTSCRIPT])
+m4trace:configure.in:372: -1- AC_SUBST_TRACE([TESTSCRIPT])
+m4trace:configure.in:372: -1- m4_pattern_allow([^TESTSCRIPT$])
+m4trace:configure.in:373: -1- AC_SUBST([PURIFY])
+m4trace:configure.in:373: -1- AC_SUBST_TRACE([PURIFY])
+m4trace:configure.in:373: -1- m4_pattern_allow([^PURIFY$])
+m4trace:configure.in:374: -1- AC_SUBST([MALLOC_TARGET])
+m4trace:configure.in:374: -1- AC_SUBST_TRACE([MALLOC_TARGET])
+m4trace:configure.in:374: -1- m4_pattern_allow([^MALLOC_TARGET$])
+m4trace:configure.in:375: -1- AC_SUBST([MALLOC_SRC])
+m4trace:configure.in:375: -1- AC_SUBST_TRACE([MALLOC_SRC])
+m4trace:configure.in:375: -1- m4_pattern_allow([^MALLOC_SRC$])
+m4trace:configure.in:377: -1- AC_SUBST([MALLOC_LIB])
+m4trace:configure.in:377: -1- AC_SUBST_TRACE([MALLOC_LIB])
+m4trace:configure.in:377: -1- m4_pattern_allow([^MALLOC_LIB$])
+m4trace:configure.in:378: -1- AC_SUBST([MALLOC_LIBRARY])
+m4trace:configure.in:378: -1- AC_SUBST_TRACE([MALLOC_LIBRARY])
+m4trace:configure.in:378: -1- m4_pattern_allow([^MALLOC_LIBRARY$])
+m4trace:configure.in:379: -1- AC_SUBST([MALLOC_LDFLAGS])
+m4trace:configure.in:379: -1- AC_SUBST_TRACE([MALLOC_LDFLAGS])
+m4trace:configure.in:379: -1- m4_pattern_allow([^MALLOC_LDFLAGS$])
+m4trace:configure.in:380: -1- AC_SUBST([MALLOC_DEP])
+m4trace:configure.in:380: -1- AC_SUBST_TRACE([MALLOC_DEP])
+m4trace:configure.in:380: -1- m4_pattern_allow([^MALLOC_DEP$])
+m4trace:configure.in:382: -1- AC_SUBST([htmldir])
+m4trace:configure.in:382: -1- AC_SUBST_TRACE([htmldir])
+m4trace:configure.in:382: -1- m4_pattern_allow([^htmldir$])
+m4trace:configure.in:384: -1- AC_SUBST([HELPDIR])
+m4trace:configure.in:384: -1- AC_SUBST_TRACE([HELPDIR])
+m4trace:configure.in:384: -1- m4_pattern_allow([^HELPDIR$])
+m4trace:configure.in:385: -1- AC_SUBST([HELPDIRDEFINE])
+m4trace:configure.in:385: -1- AC_SUBST_TRACE([HELPDIRDEFINE])
+m4trace:configure.in:385: -1- m4_pattern_allow([^HELPDIRDEFINE$])
+m4trace:configure.in:386: -1- AC_SUBST([HELPINSTALL])
+m4trace:configure.in:386: -1- AC_SUBST_TRACE([HELPINSTALL])
+m4trace:configure.in:386: -1- m4_pattern_allow([^HELPINSTALL$])
+m4trace:configure.in:387: -1- AC_SUBST([HELPFILES_TARGET])
+m4trace:configure.in:387: -1- AC_SUBST_TRACE([HELPFILES_TARGET])
+m4trace:configure.in:387: -1- m4_pattern_allow([^HELPFILES_TARGET$])
+m4trace:configure.in:388: -1- AC_SUBST([HELPSTRINGS])
+m4trace:configure.in:388: -1- AC_SUBST_TRACE([HELPSTRINGS])
+m4trace:configure.in:388: -1- m4_pattern_allow([^HELPSTRINGS$])
+m4trace:configure.in:397: -1- AC_SUBST([CC])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.in:397: -1- m4_pattern_allow([^CC$])
+m4trace:configure.in:397: -1- AC_SUBST([CFLAGS])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([CFLAGS])
+m4trace:configure.in:397: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.in:397: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.in:397: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.in:397: -1- AC_SUBST([LIBS])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([LIBS])
+m4trace:configure.in:397: -1- m4_pattern_allow([^LIBS$])
+m4trace:configure.in:397: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.in:397: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.in:397: -1- AC_SUBST([CC])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.in:397: -1- m4_pattern_allow([^CC$])
+m4trace:configure.in:397: -1- AC_SUBST([CC])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.in:397: -1- m4_pattern_allow([^CC$])
+m4trace:configure.in:397: -1- AC_SUBST([CC])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.in:397: -1- m4_pattern_allow([^CC$])
+m4trace:configure.in:397: -1- AC_SUBST([CC])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([CC])
+m4trace:configure.in:397: -1- m4_pattern_allow([^CC$])
+m4trace:configure.in:397: -1- AC_SUBST([ac_ct_CC])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([ac_ct_CC])
+m4trace:configure.in:397: -1- m4_pattern_allow([^ac_ct_CC$])
+m4trace:configure.in:397: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([EXEEXT])
+m4trace:configure.in:397: -1- m4_pattern_allow([^EXEEXT$])
+m4trace:configure.in:397: -1- AC_SUBST([OBJEXT], [$ac_cv_objext])
+m4trace:configure.in:397: -1- AC_SUBST_TRACE([OBJEXT])
+m4trace:configure.in:397: -1- m4_pattern_allow([^OBJEXT$])
+m4trace:configure.in:401: -1- _m4_warn([obsolete], [The macro `AC_MINIX' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/specific.m4:437: AC_MINIX is expanded from...
+configure.in:401: the top level])
+m4trace:configure.in:401: -1- AC_SUBST([CPP])
+m4trace:configure.in:401: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.in:401: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.in:401: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.in:401: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.in:401: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.in:401: -1- AC_SUBST([CPP])
+m4trace:configure.in:401: -1- AC_SUBST_TRACE([CPP])
+m4trace:configure.in:401: -1- m4_pattern_allow([^CPP$])
+m4trace:configure.in:401: -1- AC_SUBST([GREP])
+m4trace:configure.in:401: -1- AC_SUBST_TRACE([GREP])
+m4trace:configure.in:401: -1- m4_pattern_allow([^GREP$])
+m4trace:configure.in:401: -1- AC_SUBST([EGREP])
+m4trace:configure.in:401: -1- AC_SUBST_TRACE([EGREP])
+m4trace:configure.in:401: -1- m4_pattern_allow([^EGREP$])
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS])
+m4trace:configure.in:401: -1- m4_pattern_allow([^STDC_HEADERS$])
+m4trace:configure.in:401: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */
 @%:@undef STDC_HEADERS])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
 @%:@undef HAVE_SYS_TYPES_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
 @%:@undef HAVE_SYS_STAT_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
 @%:@undef HAVE_STDLIB_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
 @%:@undef HAVE_STRING_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
 @%:@undef HAVE_MEMORY_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
 @%:@undef HAVE_STRINGS_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
 @%:@undef HAVE_INTTYPES_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
 @%:@undef HAVE_STDINT_H])
-m4trace:configure.ac:417: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+m4trace:configure.in:401: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
 @%:@undef HAVE_UNISTD_H])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_SOURCE])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^_POSIX_SOURCE$])
-m4trace:configure.ac:417: -1- AH_OUTPUT([_POSIX_SOURCE], [/* Define to 1 if you need to in order for `stat\' and other things to work. */
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_SOURCE])
+m4trace:configure.in:401: -1- m4_pattern_allow([^_POSIX_SOURCE$])
+m4trace:configure.in:401: -1- AH_OUTPUT([_POSIX_SOURCE], [/* Define to 1 if you need to in order for `stat\' and other things to work. */
 @%:@undef _POSIX_SOURCE])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_1_SOURCE])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^_POSIX_1_SOURCE$])
-m4trace:configure.ac:417: -1- AH_OUTPUT([_POSIX_1_SOURCE], [/* Define to 2 if the system does not provide POSIX.1 features except with
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_1_SOURCE])
+m4trace:configure.in:401: -1- m4_pattern_allow([^_POSIX_1_SOURCE$])
+m4trace:configure.in:401: -1- AH_OUTPUT([_POSIX_1_SOURCE], [/* Define to 2 if the system does not provide POSIX.1 features except with
    this defined. */
 @%:@undef _POSIX_1_SOURCE])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([_MINIX])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^_MINIX$])
-m4trace:configure.ac:417: -1- AH_OUTPUT([_MINIX], [/* Define to 1 if on MINIX. */
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([_MINIX])
+m4trace:configure.in:401: -1- m4_pattern_allow([^_MINIX$])
+m4trace:configure.in:401: -1- AH_OUTPUT([_MINIX], [/* Define to 1 if on MINIX. */
 @%:@undef _MINIX])
-m4trace:configure.ac:417: -1- AH_OUTPUT([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix.  */
+m4trace:configure.in:401: -1- AH_OUTPUT([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix.  */
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
 #endif
@@ -550,175 +538,171 @@ m4trace:configure.ac:417: -1- AH_OUTPUT([USE_SYSTEM_EXTENSIONS], [/* Enable exte
 # undef __EXTENSIONS__
 #endif
 ])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([__EXTENSIONS__])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^__EXTENSIONS__$])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([_ALL_SOURCE])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^_ALL_SOURCE$])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^_GNU_SOURCE$])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_PTHREAD_SEMANTICS])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^_POSIX_PTHREAD_SEMANTICS$])
-m4trace:configure.ac:417: -1- AC_DEFINE_TRACE_LITERAL([_TANDEM_SOURCE])
-m4trace:configure.ac:417: -1- m4_pattern_allow([^_TANDEM_SOURCE$])
-m4trace:configure.ac:419: -1- AC_DEFINE_TRACE_LITERAL([_FILE_OFFSET_BITS])
-m4trace:configure.ac:419: -1- m4_pattern_allow([^_FILE_OFFSET_BITS$])
-m4trace:configure.ac:419: -1- AH_OUTPUT([_FILE_OFFSET_BITS], [/* Number of bits in a file offset, on hosts where this is settable. */
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([__EXTENSIONS__])
+m4trace:configure.in:401: -1- m4_pattern_allow([^__EXTENSIONS__$])
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([_ALL_SOURCE])
+m4trace:configure.in:401: -1- m4_pattern_allow([^_ALL_SOURCE$])
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE])
+m4trace:configure.in:401: -1- m4_pattern_allow([^_GNU_SOURCE$])
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([_POSIX_PTHREAD_SEMANTICS])
+m4trace:configure.in:401: -1- m4_pattern_allow([^_POSIX_PTHREAD_SEMANTICS$])
+m4trace:configure.in:401: -1- AC_DEFINE_TRACE_LITERAL([_TANDEM_SOURCE])
+m4trace:configure.in:401: -1- m4_pattern_allow([^_TANDEM_SOURCE$])
+m4trace:configure.in:403: -1- AC_DEFINE_TRACE_LITERAL([_FILE_OFFSET_BITS])
+m4trace:configure.in:403: -1- m4_pattern_allow([^_FILE_OFFSET_BITS$])
+m4trace:configure.in:403: -1- AH_OUTPUT([_FILE_OFFSET_BITS], [/* Number of bits in a file offset, on hosts where this is settable. */
 @%:@undef _FILE_OFFSET_BITS])
-m4trace:configure.ac:419: -1- AC_DEFINE_TRACE_LITERAL([_LARGE_FILES])
-m4trace:configure.ac:419: -1- m4_pattern_allow([^_LARGE_FILES$])
-m4trace:configure.ac:419: -1- AH_OUTPUT([_LARGE_FILES], [/* Define for large files, on AIX-style hosts. */
+m4trace:configure.in:403: -1- AC_DEFINE_TRACE_LITERAL([_LARGE_FILES])
+m4trace:configure.in:403: -1- m4_pattern_allow([^_LARGE_FILES$])
+m4trace:configure.in:403: -1- AH_OUTPUT([_LARGE_FILES], [/* Define for large files, on AIX-style hosts. */
 @%:@undef _LARGE_FILES])
-m4trace:configure.ac:419: -1- AH_OUTPUT([_DARWIN_USE_64_BIT_INODE], [/* Enable large inode numbers on Mac OS X 10.5.  */
-#ifndef _DARWIN_USE_64_BIT_INODE
-# define _DARWIN_USE_64_BIT_INODE 1
-#endif])
-m4trace:configure.ac:456: -1- AC_SUBST([CROSS_COMPILE])
-m4trace:configure.ac:456: -1- AC_SUBST_TRACE([CROSS_COMPILE])
-m4trace:configure.ac:456: -1- m4_pattern_allow([^CROSS_COMPILE$])
-m4trace:configure.ac:458: -1- AC_SUBST([SIGNAMES_H])
-m4trace:configure.ac:458: -1- AC_SUBST_TRACE([SIGNAMES_H])
-m4trace:configure.ac:458: -1- m4_pattern_allow([^SIGNAMES_H$])
-m4trace:configure.ac:459: -1- AC_SUBST([SIGNAMES_O])
-m4trace:configure.ac:459: -1- AC_SUBST_TRACE([SIGNAMES_O])
-m4trace:configure.ac:459: -1- m4_pattern_allow([^SIGNAMES_O$])
-m4trace:configure.ac:493: -1- _m4_warn([obsolete], [The macro `ac_cv_prog_gcc' is obsolete.
+m4trace:configure.in:440: -1- AC_SUBST([CROSS_COMPILE])
+m4trace:configure.in:440: -1- AC_SUBST_TRACE([CROSS_COMPILE])
+m4trace:configure.in:440: -1- m4_pattern_allow([^CROSS_COMPILE$])
+m4trace:configure.in:442: -1- AC_SUBST([SIGNAMES_H])
+m4trace:configure.in:442: -1- AC_SUBST_TRACE([SIGNAMES_H])
+m4trace:configure.in:442: -1- m4_pattern_allow([^SIGNAMES_H$])
+m4trace:configure.in:443: -1- AC_SUBST([SIGNAMES_O])
+m4trace:configure.in:443: -1- AC_SUBST_TRACE([SIGNAMES_O])
+m4trace:configure.in:443: -1- m4_pattern_allow([^SIGNAMES_O$])
+m4trace:configure.in:477: -1- _m4_warn([obsolete], [The macro `ac_cv_prog_gcc' is obsolete.
 You should run autoupdate.], [../../lib/autoconf/c.m4:436: ac_cv_prog_gcc is expanded from...
-configure.ac:493: the top level])
-m4trace:configure.ac:520: -1- AC_SUBST([CFLAGS])
-m4trace:configure.ac:520: -1- AC_SUBST_TRACE([CFLAGS])
-m4trace:configure.ac:520: -1- m4_pattern_allow([^CFLAGS$])
-m4trace:configure.ac:521: -1- AC_SUBST([CPPFLAGS])
-m4trace:configure.ac:521: -1- AC_SUBST_TRACE([CPPFLAGS])
-m4trace:configure.ac:521: -1- m4_pattern_allow([^CPPFLAGS$])
-m4trace:configure.ac:522: -1- AC_SUBST([LDFLAGS])
-m4trace:configure.ac:522: -1- AC_SUBST_TRACE([LDFLAGS])
-m4trace:configure.ac:522: -1- m4_pattern_allow([^LDFLAGS$])
-m4trace:configure.ac:523: -1- AC_SUBST([STATIC_LD])
-m4trace:configure.ac:523: -1- AC_SUBST_TRACE([STATIC_LD])
-m4trace:configure.ac:523: -1- m4_pattern_allow([^STATIC_LD$])
-m4trace:configure.ac:525: -1- AC_SUBST([CC_FOR_BUILD])
-m4trace:configure.ac:525: -1- AC_SUBST_TRACE([CC_FOR_BUILD])
-m4trace:configure.ac:525: -1- m4_pattern_allow([^CC_FOR_BUILD$])
-m4trace:configure.ac:526: -1- AC_SUBST([CFLAGS_FOR_BUILD])
-m4trace:configure.ac:526: -1- AC_SUBST_TRACE([CFLAGS_FOR_BUILD])
-m4trace:configure.ac:526: -1- m4_pattern_allow([^CFLAGS_FOR_BUILD$])
-m4trace:configure.ac:527: -1- AC_SUBST([CPPFLAGS_FOR_BUILD])
-m4trace:configure.ac:527: -1- AC_SUBST_TRACE([CPPFLAGS_FOR_BUILD])
-m4trace:configure.ac:527: -1- m4_pattern_allow([^CPPFLAGS_FOR_BUILD$])
-m4trace:configure.ac:528: -1- AC_SUBST([LDFLAGS_FOR_BUILD])
-m4trace:configure.ac:528: -1- AC_SUBST_TRACE([LDFLAGS_FOR_BUILD])
-m4trace:configure.ac:528: -1- m4_pattern_allow([^LDFLAGS_FOR_BUILD$])
-m4trace:configure.ac:529: -1- AC_SUBST([LIBS_FOR_BUILD])
-m4trace:configure.ac:529: -1- AC_SUBST_TRACE([LIBS_FOR_BUILD])
-m4trace:configure.ac:529: -1- m4_pattern_allow([^LIBS_FOR_BUILD$])
-m4trace:configure.ac:543: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:477: the top level])
+m4trace:configure.in:504: -1- AC_SUBST([CFLAGS])
+m4trace:configure.in:504: -1- AC_SUBST_TRACE([CFLAGS])
+m4trace:configure.in:504: -1- m4_pattern_allow([^CFLAGS$])
+m4trace:configure.in:505: -1- AC_SUBST([CPPFLAGS])
+m4trace:configure.in:505: -1- AC_SUBST_TRACE([CPPFLAGS])
+m4trace:configure.in:505: -1- m4_pattern_allow([^CPPFLAGS$])
+m4trace:configure.in:506: -1- AC_SUBST([LDFLAGS])
+m4trace:configure.in:506: -1- AC_SUBST_TRACE([LDFLAGS])
+m4trace:configure.in:506: -1- m4_pattern_allow([^LDFLAGS$])
+m4trace:configure.in:507: -1- AC_SUBST([STATIC_LD])
+m4trace:configure.in:507: -1- AC_SUBST_TRACE([STATIC_LD])
+m4trace:configure.in:507: -1- m4_pattern_allow([^STATIC_LD$])
+m4trace:configure.in:509: -1- AC_SUBST([CC_FOR_BUILD])
+m4trace:configure.in:509: -1- AC_SUBST_TRACE([CC_FOR_BUILD])
+m4trace:configure.in:509: -1- m4_pattern_allow([^CC_FOR_BUILD$])
+m4trace:configure.in:510: -1- AC_SUBST([CFLAGS_FOR_BUILD])
+m4trace:configure.in:510: -1- AC_SUBST_TRACE([CFLAGS_FOR_BUILD])
+m4trace:configure.in:510: -1- m4_pattern_allow([^CFLAGS_FOR_BUILD$])
+m4trace:configure.in:511: -1- AC_SUBST([CPPFLAGS_FOR_BUILD])
+m4trace:configure.in:511: -1- AC_SUBST_TRACE([CPPFLAGS_FOR_BUILD])
+m4trace:configure.in:511: -1- m4_pattern_allow([^CPPFLAGS_FOR_BUILD$])
+m4trace:configure.in:512: -1- AC_SUBST([LDFLAGS_FOR_BUILD])
+m4trace:configure.in:512: -1- AC_SUBST_TRACE([LDFLAGS_FOR_BUILD])
+m4trace:configure.in:512: -1- m4_pattern_allow([^LDFLAGS_FOR_BUILD$])
+m4trace:configure.in:513: -1- AC_SUBST([LIBS_FOR_BUILD])
+m4trace:configure.in:513: -1- AC_SUBST_TRACE([LIBS_FOR_BUILD])
+m4trace:configure.in:513: -1- m4_pattern_allow([^LIBS_FOR_BUILD$])
+m4trace:configure.in:527: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1806: RL_LIB_READLINE_VERSION is expanded from...
-configure.ac:543: the top level])
-m4trace:configure.ac:543: -1- AC_DEFINE_TRACE_LITERAL([RL_READLINE_VERSION])
-m4trace:configure.ac:543: -1- m4_pattern_allow([^RL_READLINE_VERSION$])
-m4trace:configure.ac:543: -1- AH_OUTPUT([RL_READLINE_VERSION], [/* encoded version of the installed readline library */
+configure.in:527: the top level])
+m4trace:configure.in:527: -1- AC_DEFINE_TRACE_LITERAL([RL_READLINE_VERSION])
+m4trace:configure.in:527: -1- m4_pattern_allow([^RL_READLINE_VERSION$])
+m4trace:configure.in:527: -1- AH_OUTPUT([RL_READLINE_VERSION], [/* encoded version of the installed readline library */
 @%:@undef RL_READLINE_VERSION])
-m4trace:configure.ac:543: -1- AC_DEFINE_TRACE_LITERAL([RL_VERSION_MAJOR])
-m4trace:configure.ac:543: -1- m4_pattern_allow([^RL_VERSION_MAJOR$])
-m4trace:configure.ac:543: -1- AH_OUTPUT([RL_VERSION_MAJOR], [/* major version of installed readline library */
+m4trace:configure.in:527: -1- AC_DEFINE_TRACE_LITERAL([RL_VERSION_MAJOR])
+m4trace:configure.in:527: -1- m4_pattern_allow([^RL_VERSION_MAJOR$])
+m4trace:configure.in:527: -1- AH_OUTPUT([RL_VERSION_MAJOR], [/* major version of installed readline library */
 @%:@undef RL_VERSION_MAJOR])
-m4trace:configure.ac:543: -1- AC_DEFINE_TRACE_LITERAL([RL_VERSION_MINOR])
-m4trace:configure.ac:543: -1- m4_pattern_allow([^RL_VERSION_MINOR$])
-m4trace:configure.ac:543: -1- AH_OUTPUT([RL_VERSION_MINOR], [/* minor version of installed readline library */
+m4trace:configure.in:527: -1- AC_DEFINE_TRACE_LITERAL([RL_VERSION_MINOR])
+m4trace:configure.in:527: -1- m4_pattern_allow([^RL_VERSION_MINOR$])
+m4trace:configure.in:527: -1- AH_OUTPUT([RL_VERSION_MINOR], [/* minor version of installed readline library */
 @%:@undef RL_VERSION_MINOR])
-m4trace:configure.ac:543: -1- AC_SUBST([RL_VERSION])
-m4trace:configure.ac:543: -1- AC_SUBST_TRACE([RL_VERSION])
-m4trace:configure.ac:543: -1- m4_pattern_allow([^RL_VERSION$])
-m4trace:configure.ac:543: -1- AC_SUBST([RL_MAJOR])
-m4trace:configure.ac:543: -1- AC_SUBST_TRACE([RL_MAJOR])
-m4trace:configure.ac:543: -1- m4_pattern_allow([^RL_MAJOR$])
-m4trace:configure.ac:543: -1- AC_SUBST([RL_MINOR])
-m4trace:configure.ac:543: -1- AC_SUBST_TRACE([RL_MINOR])
-m4trace:configure.ac:543: -1- m4_pattern_allow([^RL_MINOR$])
-m4trace:configure.ac:556: -1- AC_DEFINE_TRACE_LITERAL([READLINE])
-m4trace:configure.ac:556: -1- m4_pattern_allow([^READLINE$])
-m4trace:configure.ac:591: -1- AC_DEFINE_TRACE_LITERAL([HISTORY])
-m4trace:configure.ac:591: -1- m4_pattern_allow([^HISTORY$])
-m4trace:configure.ac:594: -1- AC_DEFINE_TRACE_LITERAL([BANG_HISTORY])
-m4trace:configure.ac:594: -1- m4_pattern_allow([^BANG_HISTORY$])
-m4trace:configure.ac:624: -1- AC_SUBST([READLINE_LIB])
-m4trace:configure.ac:624: -1- AC_SUBST_TRACE([READLINE_LIB])
-m4trace:configure.ac:624: -1- m4_pattern_allow([^READLINE_LIB$])
-m4trace:configure.ac:625: -1- AC_SUBST([READLINE_DEP])
-m4trace:configure.ac:625: -1- AC_SUBST_TRACE([READLINE_DEP])
-m4trace:configure.ac:625: -1- m4_pattern_allow([^READLINE_DEP$])
-m4trace:configure.ac:626: -1- AC_SUBST([RL_LIBDIR])
-m4trace:configure.ac:626: -1- AC_SUBST_TRACE([RL_LIBDIR])
-m4trace:configure.ac:626: -1- m4_pattern_allow([^RL_LIBDIR$])
-m4trace:configure.ac:627: -1- AC_SUBST([RL_INCLUDEDIR])
-m4trace:configure.ac:627: -1- AC_SUBST_TRACE([RL_INCLUDEDIR])
-m4trace:configure.ac:627: -1- m4_pattern_allow([^RL_INCLUDEDIR$])
-m4trace:configure.ac:628: -1- AC_SUBST([RL_INCLUDE])
-m4trace:configure.ac:628: -1- AC_SUBST_TRACE([RL_INCLUDE])
-m4trace:configure.ac:628: -1- m4_pattern_allow([^RL_INCLUDE$])
-m4trace:configure.ac:629: -1- AC_SUBST([HISTORY_LIB])
-m4trace:configure.ac:629: -1- AC_SUBST_TRACE([HISTORY_LIB])
-m4trace:configure.ac:629: -1- m4_pattern_allow([^HISTORY_LIB$])
-m4trace:configure.ac:630: -1- AC_SUBST([HISTORY_DEP])
-m4trace:configure.ac:630: -1- AC_SUBST_TRACE([HISTORY_DEP])
-m4trace:configure.ac:630: -1- m4_pattern_allow([^HISTORY_DEP$])
-m4trace:configure.ac:631: -1- AC_SUBST([HIST_LIBDIR])
-m4trace:configure.ac:631: -1- AC_SUBST_TRACE([HIST_LIBDIR])
-m4trace:configure.ac:631: -1- m4_pattern_allow([^HIST_LIBDIR$])
-m4trace:configure.ac:632: -1- AC_SUBST([TILDE_LIB])
-m4trace:configure.ac:632: -1- AC_SUBST_TRACE([TILDE_LIB])
-m4trace:configure.ac:632: -1- m4_pattern_allow([^TILDE_LIB$])
-m4trace:configure.ac:637: -1- AC_REQUIRE_AUX_FILE([install-sh])
-m4trace:configure.ac:637: -1- AC_SUBST([INSTALL_PROGRAM])
-m4trace:configure.ac:637: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
-m4trace:configure.ac:637: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
-m4trace:configure.ac:637: -1- AC_SUBST([INSTALL_SCRIPT])
-m4trace:configure.ac:637: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
-m4trace:configure.ac:637: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
-m4trace:configure.ac:637: -1- AC_SUBST([INSTALL_DATA])
-m4trace:configure.ac:637: -1- AC_SUBST_TRACE([INSTALL_DATA])
-m4trace:configure.ac:637: -1- m4_pattern_allow([^INSTALL_DATA$])
-m4trace:configure.ac:638: -1- AC_SUBST([AR])
-m4trace:configure.ac:638: -1- AC_SUBST_TRACE([AR])
-m4trace:configure.ac:638: -1- m4_pattern_allow([^AR$])
-m4trace:configure.ac:642: -1- AC_SUBST([RANLIB])
-m4trace:configure.ac:642: -1- AC_SUBST_TRACE([RANLIB])
-m4trace:configure.ac:642: -1- m4_pattern_allow([^RANLIB$])
-m4trace:configure.ac:643: -1- AC_SUBST([YACC])
-m4trace:configure.ac:643: -1- AC_SUBST_TRACE([YACC])
-m4trace:configure.ac:643: -1- m4_pattern_allow([^YACC$])
-m4trace:configure.ac:643: -1- AC_SUBST([YACC])
-m4trace:configure.ac:643: -1- AC_SUBST_TRACE([YACC])
-m4trace:configure.ac:643: -1- m4_pattern_allow([^YACC$])
-m4trace:configure.ac:643: -1- AC_SUBST([YFLAGS])
-m4trace:configure.ac:643: -1- AC_SUBST_TRACE([YFLAGS])
-m4trace:configure.ac:643: -1- m4_pattern_allow([^YFLAGS$])
-m4trace:configure.ac:644: -1- AC_SUBST([SET_MAKE])
-m4trace:configure.ac:644: -1- AC_SUBST_TRACE([SET_MAKE])
-m4trace:configure.ac:644: -1- m4_pattern_allow([^SET_MAKE$])
-m4trace:configure.ac:655: -1- AC_SUBST([MAKE_SHELL])
-m4trace:configure.ac:655: -1- AC_SUBST_TRACE([MAKE_SHELL])
-m4trace:configure.ac:655: -1- m4_pattern_allow([^MAKE_SHELL$])
-m4trace:configure.ac:677: -1- AC_SUBST([SIZE])
-m4trace:configure.ac:677: -1- AC_SUBST_TRACE([SIZE])
-m4trace:configure.ac:677: -1- m4_pattern_allow([^SIZE$])
-m4trace:configure.ac:679: -1- m4_include([m4/stat-time.m4])
-m4trace:configure.ac:680: -1- m4_include([m4/timespec.m4])
-m4trace:configure.ac:683: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE])
-m4trace:configure.ac:683: -1- m4_pattern_allow([^_GNU_SOURCE$])
-m4trace:configure.ac:686: -1- AC_DEFINE_TRACE_LITERAL([const])
-m4trace:configure.ac:686: -1- m4_pattern_allow([^const$])
-m4trace:configure.ac:686: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */
+m4trace:configure.in:527: -1- AC_SUBST([RL_VERSION])
+m4trace:configure.in:527: -1- AC_SUBST_TRACE([RL_VERSION])
+m4trace:configure.in:527: -1- m4_pattern_allow([^RL_VERSION$])
+m4trace:configure.in:527: -1- AC_SUBST([RL_MAJOR])
+m4trace:configure.in:527: -1- AC_SUBST_TRACE([RL_MAJOR])
+m4trace:configure.in:527: -1- m4_pattern_allow([^RL_MAJOR$])
+m4trace:configure.in:527: -1- AC_SUBST([RL_MINOR])
+m4trace:configure.in:527: -1- AC_SUBST_TRACE([RL_MINOR])
+m4trace:configure.in:527: -1- m4_pattern_allow([^RL_MINOR$])
+m4trace:configure.in:540: -1- AC_DEFINE_TRACE_LITERAL([READLINE])
+m4trace:configure.in:540: -1- m4_pattern_allow([^READLINE$])
+m4trace:configure.in:575: -1- AC_DEFINE_TRACE_LITERAL([HISTORY])
+m4trace:configure.in:575: -1- m4_pattern_allow([^HISTORY$])
+m4trace:configure.in:578: -1- AC_DEFINE_TRACE_LITERAL([BANG_HISTORY])
+m4trace:configure.in:578: -1- m4_pattern_allow([^BANG_HISTORY$])
+m4trace:configure.in:608: -1- AC_SUBST([READLINE_LIB])
+m4trace:configure.in:608: -1- AC_SUBST_TRACE([READLINE_LIB])
+m4trace:configure.in:608: -1- m4_pattern_allow([^READLINE_LIB$])
+m4trace:configure.in:609: -1- AC_SUBST([READLINE_DEP])
+m4trace:configure.in:609: -1- AC_SUBST_TRACE([READLINE_DEP])
+m4trace:configure.in:609: -1- m4_pattern_allow([^READLINE_DEP$])
+m4trace:configure.in:610: -1- AC_SUBST([RL_LIBDIR])
+m4trace:configure.in:610: -1- AC_SUBST_TRACE([RL_LIBDIR])
+m4trace:configure.in:610: -1- m4_pattern_allow([^RL_LIBDIR$])
+m4trace:configure.in:611: -1- AC_SUBST([RL_INCLUDEDIR])
+m4trace:configure.in:611: -1- AC_SUBST_TRACE([RL_INCLUDEDIR])
+m4trace:configure.in:611: -1- m4_pattern_allow([^RL_INCLUDEDIR$])
+m4trace:configure.in:612: -1- AC_SUBST([RL_INCLUDE])
+m4trace:configure.in:612: -1- AC_SUBST_TRACE([RL_INCLUDE])
+m4trace:configure.in:612: -1- m4_pattern_allow([^RL_INCLUDE$])
+m4trace:configure.in:613: -1- AC_SUBST([HISTORY_LIB])
+m4trace:configure.in:613: -1- AC_SUBST_TRACE([HISTORY_LIB])
+m4trace:configure.in:613: -1- m4_pattern_allow([^HISTORY_LIB$])
+m4trace:configure.in:614: -1- AC_SUBST([HISTORY_DEP])
+m4trace:configure.in:614: -1- AC_SUBST_TRACE([HISTORY_DEP])
+m4trace:configure.in:614: -1- m4_pattern_allow([^HISTORY_DEP$])
+m4trace:configure.in:615: -1- AC_SUBST([HIST_LIBDIR])
+m4trace:configure.in:615: -1- AC_SUBST_TRACE([HIST_LIBDIR])
+m4trace:configure.in:615: -1- m4_pattern_allow([^HIST_LIBDIR$])
+m4trace:configure.in:616: -1- AC_SUBST([TILDE_LIB])
+m4trace:configure.in:616: -1- AC_SUBST_TRACE([TILDE_LIB])
+m4trace:configure.in:616: -1- m4_pattern_allow([^TILDE_LIB$])
+m4trace:configure.in:621: -1- AC_REQUIRE_AUX_FILE([install-sh])
+m4trace:configure.in:621: -1- AC_SUBST([INSTALL_PROGRAM])
+m4trace:configure.in:621: -1- AC_SUBST_TRACE([INSTALL_PROGRAM])
+m4trace:configure.in:621: -1- m4_pattern_allow([^INSTALL_PROGRAM$])
+m4trace:configure.in:621: -1- AC_SUBST([INSTALL_SCRIPT])
+m4trace:configure.in:621: -1- AC_SUBST_TRACE([INSTALL_SCRIPT])
+m4trace:configure.in:621: -1- m4_pattern_allow([^INSTALL_SCRIPT$])
+m4trace:configure.in:621: -1- AC_SUBST([INSTALL_DATA])
+m4trace:configure.in:621: -1- AC_SUBST_TRACE([INSTALL_DATA])
+m4trace:configure.in:621: -1- m4_pattern_allow([^INSTALL_DATA$])
+m4trace:configure.in:622: -1- AC_SUBST([AR])
+m4trace:configure.in:622: -1- AC_SUBST_TRACE([AR])
+m4trace:configure.in:622: -1- m4_pattern_allow([^AR$])
+m4trace:configure.in:626: -1- AC_SUBST([RANLIB])
+m4trace:configure.in:626: -1- AC_SUBST_TRACE([RANLIB])
+m4trace:configure.in:626: -1- m4_pattern_allow([^RANLIB$])
+m4trace:configure.in:627: -1- AC_SUBST([YACC])
+m4trace:configure.in:627: -1- AC_SUBST_TRACE([YACC])
+m4trace:configure.in:627: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.in:627: -1- AC_SUBST([YACC])
+m4trace:configure.in:627: -1- AC_SUBST_TRACE([YACC])
+m4trace:configure.in:627: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.in:627: -1- AC_SUBST([YFLAGS])
+m4trace:configure.in:627: -1- AC_SUBST_TRACE([YFLAGS])
+m4trace:configure.in:627: -1- m4_pattern_allow([^YFLAGS$])
+m4trace:configure.in:628: -1- AC_SUBST([SET_MAKE])
+m4trace:configure.in:628: -1- AC_SUBST_TRACE([SET_MAKE])
+m4trace:configure.in:628: -1- m4_pattern_allow([^SET_MAKE$])
+m4trace:configure.in:634: -1- AC_SUBST([MAKE_SHELL])
+m4trace:configure.in:634: -1- AC_SUBST_TRACE([MAKE_SHELL])
+m4trace:configure.in:634: -1- m4_pattern_allow([^MAKE_SHELL$])
+m4trace:configure.in:656: -1- AC_SUBST([SIZE])
+m4trace:configure.in:656: -1- AC_SUBST_TRACE([SIZE])
+m4trace:configure.in:656: -1- m4_pattern_allow([^SIZE$])
+m4trace:configure.in:658: -1- m4_include([m4/stat-time.m4])
+m4trace:configure.in:659: -1- m4_include([m4/timespec.m4])
+m4trace:configure.in:662: -1- AC_DEFINE_TRACE_LITERAL([_GNU_SOURCE])
+m4trace:configure.in:662: -1- m4_pattern_allow([^_GNU_SOURCE$])
+m4trace:configure.in:665: -1- AC_DEFINE_TRACE_LITERAL([const])
+m4trace:configure.in:665: -1- m4_pattern_allow([^const$])
+m4trace:configure.in:665: -1- AH_OUTPUT([const], [/* Define to empty if `const\' does not conform to ANSI C. */
 @%:@undef const])
-m4trace:configure.ac:687: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler
+m4trace:configure.in:666: -1- AH_OUTPUT([inline], [/* Define to `__inline__\' or `__inline\' if that\'s what the C compiler
    calls it, or to nothing if \'inline\' is not supported under any name.  */
 #ifndef __cplusplus
 #undef inline
 #endif])
-m4trace:configure.ac:688: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+m4trace:configure.in:667: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
 # if defined __BIG_ENDIAN__
@@ -729,49 +713,49 @@ m4trace:configure.ac:688: -1- AH_OUTPUT([WORDS_BIGENDIAN], [/* Define WORDS_BIGE
 #  undef WORDS_BIGENDIAN
 # endif
 #endif])
-m4trace:configure.ac:688: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN])
-m4trace:configure.ac:688: -1- m4_pattern_allow([^WORDS_BIGENDIAN$])
-m4trace:configure.ac:688: -1- AC_DEFINE_TRACE_LITERAL([AC_APPLE_UNIVERSAL_BUILD])
-m4trace:configure.ac:688: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$])
-m4trace:configure.ac:688: -1- AH_OUTPUT([AC_APPLE_UNIVERSAL_BUILD], [/* Define if building universal (internal helper macro) */
+m4trace:configure.in:667: -1- AC_DEFINE_TRACE_LITERAL([WORDS_BIGENDIAN])
+m4trace:configure.in:667: -1- m4_pattern_allow([^WORDS_BIGENDIAN$])
+m4trace:configure.in:667: -1- AC_DEFINE_TRACE_LITERAL([AC_APPLE_UNIVERSAL_BUILD])
+m4trace:configure.in:667: -1- m4_pattern_allow([^AC_APPLE_UNIVERSAL_BUILD$])
+m4trace:configure.in:667: -1- AH_OUTPUT([AC_APPLE_UNIVERSAL_BUILD], [/* Define if building universal (internal helper macro) */
 @%:@undef AC_APPLE_UNIVERSAL_BUILD])
-m4trace:configure.ac:689: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRINGIZE])
-m4trace:configure.ac:689: -1- m4_pattern_allow([^HAVE_STRINGIZE$])
-m4trace:configure.ac:689: -1- AH_OUTPUT([HAVE_STRINGIZE], [/* Define to 1 if cpp supports the ANSI @%:@ stringizing operator. */
+m4trace:configure.in:668: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRINGIZE])
+m4trace:configure.in:668: -1- m4_pattern_allow([^HAVE_STRINGIZE$])
+m4trace:configure.in:668: -1- AH_OUTPUT([HAVE_STRINGIZE], [/* Define to 1 if cpp supports the ANSI @%:@ stringizing operator. */
 @%:@undef HAVE_STRINGIZE])
-m4trace:configure.ac:690: -1- _m4_warn([obsolete], [The macro `AC_C_LONG_DOUBLE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/types.m4:452: AC_C_LONG_DOUBLE is expanded from...
-configure.ac:690: the top level])
-m4trace:configure.ac:690: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_DOUBLE_WIDER])
-m4trace:configure.ac:690: -1- m4_pattern_allow([^HAVE_LONG_DOUBLE_WIDER$])
-m4trace:configure.ac:690: -1- AH_OUTPUT([HAVE_LONG_DOUBLE_WIDER], [/* Define to 1 if the type `long double\' works and has more range or precision
+m4trace:configure.in:669: -1- _m4_warn([obsolete], [The macro `AC_C_LONG_DOUBLE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/types.m4:451: AC_C_LONG_DOUBLE is expanded from...
+configure.in:669: the top level])
+m4trace:configure.in:669: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_DOUBLE_WIDER])
+m4trace:configure.in:669: -1- m4_pattern_allow([^HAVE_LONG_DOUBLE_WIDER$])
+m4trace:configure.in:669: -1- AH_OUTPUT([HAVE_LONG_DOUBLE_WIDER], [/* Define to 1 if the type `long double\' works and has more range or precision
    than `double\'. */
 @%:@undef HAVE_LONG_DOUBLE_WIDER])
-m4trace:configure.ac:690: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_DOUBLE])
-m4trace:configure.ac:690: -1- m4_pattern_allow([^HAVE_LONG_DOUBLE$])
-m4trace:configure.ac:690: -1- AH_OUTPUT([HAVE_LONG_DOUBLE], [/* Define to 1 if the type `long double\' works and has more range or precision
+m4trace:configure.in:669: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_DOUBLE])
+m4trace:configure.in:669: -1- m4_pattern_allow([^HAVE_LONG_DOUBLE$])
+m4trace:configure.in:669: -1- AH_OUTPUT([HAVE_LONG_DOUBLE], [/* Define to 1 if the type `long double\' works and has more range or precision
    than `double\'. */
 @%:@undef HAVE_LONG_DOUBLE])
-m4trace:configure.ac:691: -1- AC_DEFINE_TRACE_LITERAL([PROTOTYPES])
-m4trace:configure.ac:691: -1- m4_pattern_allow([^PROTOTYPES$])
-m4trace:configure.ac:691: -1- AH_OUTPUT([PROTOTYPES], [/* Define to 1 if the C compiler supports function prototypes. */
+m4trace:configure.in:670: -1- AC_DEFINE_TRACE_LITERAL([PROTOTYPES])
+m4trace:configure.in:670: -1- m4_pattern_allow([^PROTOTYPES$])
+m4trace:configure.in:670: -1- AH_OUTPUT([PROTOTYPES], [/* Define to 1 if the C compiler supports function prototypes. */
 @%:@undef PROTOTYPES])
-m4trace:configure.ac:691: -1- AC_DEFINE_TRACE_LITERAL([__PROTOTYPES])
-m4trace:configure.ac:691: -1- m4_pattern_allow([^__PROTOTYPES$])
-m4trace:configure.ac:691: -1- AH_OUTPUT([__PROTOTYPES], [/* Define like PROTOTYPES; this can be used by system headers. */
+m4trace:configure.in:670: -1- AC_DEFINE_TRACE_LITERAL([__PROTOTYPES])
+m4trace:configure.in:670: -1- m4_pattern_allow([^__PROTOTYPES$])
+m4trace:configure.in:670: -1- AH_OUTPUT([__PROTOTYPES], [/* Define like PROTOTYPES; this can be used by system headers. */
 @%:@undef __PROTOTYPES])
-m4trace:configure.ac:692: -1- AH_OUTPUT([__CHAR_UNSIGNED__], [/* Define to 1 if type `char\' is unsigned and you are not using gcc.  */
+m4trace:configure.in:671: -1- AH_OUTPUT([__CHAR_UNSIGNED__], [/* Define to 1 if type `char\' is unsigned and you are not using gcc.  */
 #ifndef __CHAR_UNSIGNED__
 # undef __CHAR_UNSIGNED__
 #endif])
-m4trace:configure.ac:692: -1- AC_DEFINE_TRACE_LITERAL([__CHAR_UNSIGNED__])
-m4trace:configure.ac:692: -1- m4_pattern_allow([^__CHAR_UNSIGNED__$])
-m4trace:configure.ac:693: -1- AC_DEFINE_TRACE_LITERAL([volatile])
-m4trace:configure.ac:693: -1- m4_pattern_allow([^volatile$])
-m4trace:configure.ac:693: -1- AH_OUTPUT([volatile], [/* Define to empty if the keyword `volatile\' does not work. Warning: valid
+m4trace:configure.in:671: -1- AC_DEFINE_TRACE_LITERAL([__CHAR_UNSIGNED__])
+m4trace:configure.in:671: -1- m4_pattern_allow([^__CHAR_UNSIGNED__$])
+m4trace:configure.in:672: -1- AC_DEFINE_TRACE_LITERAL([volatile])
+m4trace:configure.in:672: -1- m4_pattern_allow([^volatile$])
+m4trace:configure.in:672: -1- AH_OUTPUT([volatile], [/* Define to empty if the keyword `volatile\' does not work. Warning: valid
    code using `volatile\' can become incorrect without. Disable with care. */
 @%:@undef volatile])
-m4trace:configure.ac:694: -1- AH_OUTPUT([restrict], [/* Define to the equivalent of the C99 \'restrict\' keyword, or to
+m4trace:configure.in:673: -1- AH_OUTPUT([restrict], [/* Define to the equivalent of the C99 \'restrict\' keyword, or to
    nothing if this is not supported.  Do not define if restrict is
    supported directly.  */
 #undef restrict
@@ -784,2006 +768,2005 @@ m4trace:configure.ac:694: -1- AH_OUTPUT([restrict], [/* Define to the equivalent
 # define _Restrict
 # define __restrict__
 #endif])
-m4trace:configure.ac:694: -1- AC_DEFINE_TRACE_LITERAL([restrict])
-m4trace:configure.ac:694: -1- m4_pattern_allow([^restrict$])
-m4trace:configure.ac:694: -1- AC_DEFINE_TRACE_LITERAL([restrict])
-m4trace:configure.ac:694: -1- m4_pattern_allow([^restrict$])
-m4trace:configure.ac:697: -1- AM_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl])
-m4trace:configure.ac:697: -1- AC_SUBST([MKINSTALLDIRS])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([MKINSTALLDIRS])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^MKINSTALLDIRS$])
-m4trace:configure.ac:697: -1- AM_NLS
-m4trace:configure.ac:697: -1- AC_SUBST([USE_NLS])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([USE_NLS])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^USE_NLS$])
-m4trace:configure.ac:697: -1- AC_SUBST([MSGFMT])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([MSGFMT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^MSGFMT$])
-m4trace:configure.ac:697: -1- AC_SUBST([GMSGFMT])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([GMSGFMT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^GMSGFMT$])
-m4trace:configure.ac:697: -1- AC_SUBST([XGETTEXT])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([XGETTEXT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^XGETTEXT$])
-m4trace:configure.ac:697: -1- AC_SUBST([MSGMERGE])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([MSGMERGE])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^MSGMERGE$])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_OUTPUT_COMMANDS' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/status.m4:1026: AC_OUTPUT_COMMANDS is expanded from...
+m4trace:configure.in:673: -1- AC_DEFINE_TRACE_LITERAL([restrict])
+m4trace:configure.in:673: -1- m4_pattern_allow([^restrict$])
+m4trace:configure.in:673: -1- AC_DEFINE_TRACE_LITERAL([restrict])
+m4trace:configure.in:673: -1- m4_pattern_allow([^restrict$])
+m4trace:configure.in:676: -1- AM_GNU_GETTEXT([no-libtool], [need-ngettext], [lib/intl])
+m4trace:configure.in:676: -1- AC_SUBST([MKINSTALLDIRS])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([MKINSTALLDIRS])
+m4trace:configure.in:676: -1- m4_pattern_allow([^MKINSTALLDIRS$])
+m4trace:configure.in:676: -1- AM_NLS
+m4trace:configure.in:676: -1- AC_SUBST([USE_NLS])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([USE_NLS])
+m4trace:configure.in:676: -1- m4_pattern_allow([^USE_NLS$])
+m4trace:configure.in:676: -1- AC_SUBST([MSGFMT])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([MSGFMT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^MSGFMT$])
+m4trace:configure.in:676: -1- AC_SUBST([GMSGFMT])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([GMSGFMT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^GMSGFMT$])
+m4trace:configure.in:676: -1- AC_SUBST([XGETTEXT])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([XGETTEXT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^XGETTEXT$])
+m4trace:configure.in:676: -1- AC_SUBST([MSGMERGE])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([MSGMERGE])
+m4trace:configure.in:676: -1- m4_pattern_allow([^MSGMERGE$])
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_OUTPUT_COMMANDS' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/status.m4:1028: AC_OUTPUT_COMMANDS is expanded from...
 aclocal.m4:3707: AM_PO_SUBDIRS is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([off_t])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^off_t$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if <sys/types.h> does not define. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([off_t])
+m4trace:configure.in:676: -1- m4_pattern_allow([^off_t$])
+m4trace:configure.in:676: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if <sys/types.h> does not define. */
 @%:@undef off_t])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([size_t])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^size_t$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([size_t])
+m4trace:configure.in:676: -1- m4_pattern_allow([^size_t$])
+m4trace:configure.in:676: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
 @%:@undef size_t])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA_H])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_ALLOCA_H$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_ALLOCA_H], [/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA_H])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_ALLOCA_H$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_ALLOCA_H], [/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
    */
 @%:@undef HAVE_ALLOCA_H])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_ALLOCA$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_ALLOCA], [/* Define to 1 if you have `alloca\', as a function or macro. */
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_ALLOCA$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_ALLOCA], [/* Define to 1 if you have `alloca\', as a function or macro. */
 @%:@undef HAVE_ALLOCA])
-m4trace:configure.ac:697: -1- AC_LIBSOURCE([alloca.c])
-m4trace:configure.ac:697: -1- AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([ALLOCA])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^ALLOCA$])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([C_ALLOCA])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^C_ALLOCA$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([C_ALLOCA], [/* Define to 1 if using `alloca.c\'. */
+m4trace:configure.in:676: -1- AC_LIBSOURCE([alloca.c])
+m4trace:configure.in:676: -1- AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([ALLOCA])
+m4trace:configure.in:676: -1- m4_pattern_allow([^ALLOCA$])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([C_ALLOCA])
+m4trace:configure.in:676: -1- m4_pattern_allow([^C_ALLOCA$])
+m4trace:configure.in:676: -1- AH_OUTPUT([C_ALLOCA], [/* Define to 1 if using `alloca.c\'. */
 @%:@undef C_ALLOCA])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([CRAY_STACKSEG_END])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^CRAY_STACKSEG_END$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([CRAY_STACKSEG_END], [/* Define to one of `_getb67\', `GETB67\', `getb67\' for Cray-2 and Cray-YMP
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([CRAY_STACKSEG_END])
+m4trace:configure.in:676: -1- m4_pattern_allow([^CRAY_STACKSEG_END$])
+m4trace:configure.in:676: -1- AH_OUTPUT([CRAY_STACKSEG_END], [/* Define to one of `_getb67\', `GETB67\', `getb67\' for Cray-2 and Cray-YMP
    systems. This function is required for `alloca.c\' support on those systems.
    */
 @%:@undef CRAY_STACKSEG_END])
-m4trace:configure.ac:697: -1- AH_OUTPUT([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the
+m4trace:configure.in:676: -1- AH_OUTPUT([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the
    direction of stack growth for your system; otherwise it will be
    automatically deduced at runtime.
        STACK_DIRECTION > 0 => grows toward higher addresses
        STACK_DIRECTION < 0 => grows toward lower addresses
        STACK_DIRECTION = 0 => direction of growth unknown */
 @%:@undef STACK_DIRECTION])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([STACK_DIRECTION])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^STACK_DIRECTION$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([STACK_DIRECTION])
+m4trace:configure.in:676: -1- m4_pattern_allow([^STACK_DIRECTION$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
 @%:@undef HAVE_STDLIB_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
 @%:@undef HAVE_UNISTD_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
 @%:@undef HAVE_SYS_PARAM_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
 @%:@undef HAVE_GETPAGESIZE])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPAGESIZE])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_GETPAGESIZE$])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MMAP])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_MMAP$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_MMAP], [/* Define to 1 if you have a working `mmap\' system call. */
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPAGESIZE])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_GETPAGESIZE$])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MMAP])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_MMAP$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_MMAP], [/* Define to 1 if you have a working `mmap\' system call. */
 @%:@undef HAVE_MMAP])
-m4trace:configure.ac:697: -1- AC_SUBST([GLIBC21])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([GLIBC21])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^GLIBC21$])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- AC_SUBST([GLIBC21])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([GLIBC21])
+m4trace:configure.in:676: -1- m4_pattern_allow([^GLIBC21$])
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2613: gt_INTDIV0 is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([INTDIV0_RAISES_SIGFPE])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^INTDIV0_RAISES_SIGFPE$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([INTDIV0_RAISES_SIGFPE], [/* Define if integer division by zero raises signal SIGFPE. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([INTDIV0_RAISES_SIGFPE])
+m4trace:configure.in:676: -1- m4_pattern_allow([^INTDIV0_RAISES_SIGFPE$])
+m4trace:configure.in:676: -1- AH_OUTPUT([INTDIV0_RAISES_SIGFPE], [/* Define if integer division by zero raises signal SIGFPE. */
 @%:@undef INTDIV0_RAISES_SIGFPE])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2715: jm_AC_HEADER_INTTYPES_H is expanded from...
 aclocal.m4:4016: jm_AC_TYPE_UINTMAX_T is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INTTYPES_H_WITH_UINTMAX])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_INTTYPES_H_WITH_UINTMAX$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_INTTYPES_H_WITH_UINTMAX], [/* Define if <inttypes.h> exists, doesn\'t clash with <sys/types.h>, and
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INTTYPES_H_WITH_UINTMAX])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_INTTYPES_H_WITH_UINTMAX$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_INTTYPES_H_WITH_UINTMAX], [/* Define if <inttypes.h> exists, doesn\'t clash with <sys/types.h>, and
    declares uintmax_t. */
 @%:@undef HAVE_INTTYPES_H_WITH_UINTMAX])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:3986: jm_AC_HEADER_STDINT_H is expanded from...
 aclocal.m4:4016: jm_AC_TYPE_UINTMAX_T is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDINT_H_WITH_UINTMAX])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_STDINT_H_WITH_UINTMAX$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STDINT_H_WITH_UINTMAX], [/* Define if <stdint.h> exists, doesn\'t clash with <sys/types.h>, and declares
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STDINT_H_WITH_UINTMAX])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_STDINT_H_WITH_UINTMAX$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STDINT_H_WITH_UINTMAX], [/* Define if <stdint.h> exists, doesn\'t clash with <sys/types.h>, and declares
    uintmax_t. */
 @%:@undef HAVE_STDINT_H_WITH_UINTMAX])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:4043: jm_AC_TYPE_UNSIGNED_LONG_LONG is expanded from...
 aclocal.m4:4016: jm_AC_TYPE_UINTMAX_T is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UNSIGNED_LONG_LONG])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_UNSIGNED_LONG_LONG$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_UNSIGNED_LONG_LONG], [/* Define if you have the unsigned long long type. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UNSIGNED_LONG_LONG])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_UNSIGNED_LONG_LONG$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_UNSIGNED_LONG_LONG], [/* Define if you have the unsigned long long type. */
 @%:@undef HAVE_UNSIGNED_LONG_LONG])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([uintmax_t])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^uintmax_t$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([uintmax_t], [/* Define to unsigned long or unsigned long long if <stdint.h> and
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([uintmax_t])
+m4trace:configure.in:676: -1- m4_pattern_allow([^uintmax_t$])
+m4trace:configure.in:676: -1- AH_OUTPUT([uintmax_t], [/* Define to unsigned long or unsigned long long if <stdint.h> and
    <inttypes.h> don\'t define. */
 @%:@undef uintmax_t])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UINTMAX_T])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_UINTMAX_T$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_UINTMAX_T], [/* Define if you have the \'uintmax_t\' type in <stdint.h> or <inttypes.h>. */
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UINTMAX_T])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_UINTMAX_T$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_UINTMAX_T], [/* Define if you have the \'uintmax_t\' type in <stdint.h> or <inttypes.h>. */
 @%:@undef HAVE_UINTMAX_T])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2688: gt_HEADER_INTTYPES_H is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INTTYPES_H])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_INTTYPES_H$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define if <inttypes.h> exists and doesn\'t clash with <sys/types.h>. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INTTYPES_H])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_INTTYPES_H$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define if <inttypes.h> exists and doesn\'t clash with <sys/types.h>. */
 @%:@undef HAVE_INTTYPES_H])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2743: gt_INTTYPES_PRI is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([PRI_MACROS_BROKEN])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^PRI_MACROS_BROKEN$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([PRI_MACROS_BROKEN], [/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([PRI_MACROS_BROKEN])
+m4trace:configure.in:676: -1- m4_pattern_allow([^PRI_MACROS_BROKEN$])
+m4trace:configure.in:676: -1- AH_OUTPUT([PRI_MACROS_BROKEN], [/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
 @%:@undef PRI_MACROS_BROKEN])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_ARGZ_H], [/* Define to 1 if you have the <argz.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_ARGZ_H], [/* Define to 1 if you have the <argz.h> header file. */
 @%:@undef HAVE_ARGZ_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the <limits.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the <limits.h> header file. */
 @%:@undef HAVE_LIMITS_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the <locale.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the <locale.h> header file. */
 @%:@undef HAVE_LOCALE_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_NL_TYPES_H], [/* Define to 1 if you have the <nl_types.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_NL_TYPES_H], [/* Define to 1 if you have the <nl_types.h> header file. */
 @%:@undef HAVE_NL_TYPES_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_MALLOC_H], [/* Define to 1 if you have the <malloc.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_MALLOC_H], [/* Define to 1 if you have the <malloc.h> header file. */
 @%:@undef HAVE_MALLOC_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STDDEF_H], [/* Define to 1 if you have the <stddef.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STDDEF_H], [/* Define to 1 if you have the <stddef.h> header file. */
 @%:@undef HAVE_STDDEF_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
 @%:@undef HAVE_STDLIB_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
 @%:@undef HAVE_STRING_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
 @%:@undef HAVE_UNISTD_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
 @%:@undef HAVE_SYS_PARAM_H])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_FEOF_UNLOCKED], [/* Define to 1 if you have the `feof_unlocked\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_FEOF_UNLOCKED], [/* Define to 1 if you have the `feof_unlocked\' function. */
 @%:@undef HAVE_FEOF_UNLOCKED])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_FGETS_UNLOCKED], [/* Define to 1 if you have the `fgets_unlocked\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_FGETS_UNLOCKED], [/* Define to 1 if you have the `fgets_unlocked\' function. */
 @%:@undef HAVE_FGETS_UNLOCKED])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETC_UNLOCKED], [/* Define to 1 if you have the `getc_unlocked\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETC_UNLOCKED], [/* Define to 1 if you have the `getc_unlocked\' function. */
 @%:@undef HAVE_GETC_UNLOCKED])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETCWD], [/* Define to 1 if you have the `getcwd\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETCWD], [/* Define to 1 if you have the `getcwd\' function. */
 @%:@undef HAVE_GETCWD])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETEGID], [/* Define to 1 if you have the `getegid\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETEGID], [/* Define to 1 if you have the `getegid\' function. */
 @%:@undef HAVE_GETEGID])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETEUID], [/* Define to 1 if you have the `geteuid\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETEUID], [/* Define to 1 if you have the `geteuid\' function. */
 @%:@undef HAVE_GETEUID])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETGID], [/* Define to 1 if you have the `getgid\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETGID], [/* Define to 1 if you have the `getgid\' function. */
 @%:@undef HAVE_GETGID])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETUID], [/* Define to 1 if you have the `getuid\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETUID], [/* Define to 1 if you have the `getuid\' function. */
 @%:@undef HAVE_GETUID])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_MEMPCPY], [/* Define to 1 if you have the `mempcpy\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_MEMPCPY], [/* Define to 1 if you have the `mempcpy\' function. */
 @%:@undef HAVE_MEMPCPY])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_MUNMAP], [/* Define to 1 if you have the `munmap\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_MUNMAP], [/* Define to 1 if you have the `munmap\' function. */
 @%:@undef HAVE_MUNMAP])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_PUTENV], [/* Define to 1 if you have the `putenv\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_PUTENV], [/* Define to 1 if you have the `putenv\' function. */
 @%:@undef HAVE_PUTENV])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_SETENV], [/* Define to 1 if you have the `setenv\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_SETENV], [/* Define to 1 if you have the `setenv\' function. */
 @%:@undef HAVE_SETENV])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the `setlocale\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the `setlocale\' function. */
 @%:@undef HAVE_SETLOCALE])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_LOCALECONV], [/* Define to 1 if you have the `localeconv\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_LOCALECONV], [/* Define to 1 if you have the `localeconv\' function. */
 @%:@undef HAVE_LOCALECONV])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STPCPY], [/* Define to 1 if you have the `stpcpy\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STPCPY], [/* Define to 1 if you have the `stpcpy\' function. */
 @%:@undef HAVE_STPCPY])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */
 @%:@undef HAVE_STRCASECMP])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STRDUP], [/* Define to 1 if you have the `strdup\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STRDUP], [/* Define to 1 if you have the `strdup\' function. */
 @%:@undef HAVE_STRDUP])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_STRTOUL], [/* Define to 1 if you have the `strtoul\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_STRTOUL], [/* Define to 1 if you have the `strtoul\' function. */
 @%:@undef HAVE_STRTOUL])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_TSEARCH], [/* Define to 1 if you have the `tsearch\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_TSEARCH], [/* Define to 1 if you have the `tsearch\' function. */
 @%:@undef HAVE_TSEARCH])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE___ARGZ_COUNT], [/* Define to 1 if you have the `__argz_count\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE___ARGZ_COUNT], [/* Define to 1 if you have the `__argz_count\' function. */
 @%:@undef HAVE___ARGZ_COUNT])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE___ARGZ_STRINGIFY], [/* Define to 1 if you have the `__argz_stringify\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE___ARGZ_STRINGIFY], [/* Define to 1 if you have the `__argz_stringify\' function. */
 @%:@undef HAVE___ARGZ_STRINGIFY])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE___ARGZ_NEXT], [/* Define to 1 if you have the `__argz_next\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE___ARGZ_NEXT], [/* Define to 1 if you have the `__argz_next\' function. */
 @%:@undef HAVE___ARGZ_NEXT])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE___FSETLOCKING], [/* Define to 1 if you have the `__fsetlocking\' function. */
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE___FSETLOCKING], [/* Define to 1 if you have the `__fsetlocking\' function. */
 @%:@undef HAVE___FSETLOCKING])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2521: AM_ICONV_LINK is expanded from...
 aclocal.m4:2576: AM_ICONV is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2521: AM_ICONV_LINK is expanded from...
 aclocal.m4:2576: AM_ICONV is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ICONV])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_ICONV$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_ICONV], [/* Define if you have the iconv() function. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ICONV])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_ICONV$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_ICONV], [/* Define if you have the iconv() function. */
 @%:@undef HAVE_ICONV])
-m4trace:configure.ac:697: -1- AC_SUBST([LIBICONV])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([LIBICONV])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^LIBICONV$])
-m4trace:configure.ac:697: -1- AC_SUBST([LTLIBICONV])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([LTLIBICONV])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^LTLIBICONV$])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+m4trace:configure.in:676: -1- AC_SUBST([LIBICONV])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([LIBICONV])
+m4trace:configure.in:676: -1- m4_pattern_allow([^LIBICONV$])
+m4trace:configure.in:676: -1- AC_SUBST([LTLIBICONV])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([LTLIBICONV])
+m4trace:configure.in:676: -1- m4_pattern_allow([^LTLIBICONV$])
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:2576: AM_ICONV is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([ICONV_CONST])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^ICONV_CONST$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([ICONV_CONST], [/* Define as const if the declaration of iconv() needs const. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([ICONV_CONST])
+m4trace:configure.in:676: -1- m4_pattern_allow([^ICONV_CONST$])
+m4trace:configure.in:676: -1- AH_OUTPUT([ICONV_CONST], [/* Define as const if the declaration of iconv() needs const. */
 @%:@undef ICONV_CONST])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2040: AM_LANGINFO_CODESET is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LANGINFO_CODESET])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_LANGINFO_CODESET$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_LANGINFO_CODESET], [/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LANGINFO_CODESET])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_LANGINFO_CODESET$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_LANGINFO_CODESET], [/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
 @%:@undef HAVE_LANGINFO_CODESET])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2810: AM_LC_MESSAGES is expanded from...
 aclocal.m4:2399: AM_INTL_SUBDIR is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LC_MESSAGES])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_LC_MESSAGES$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_LC_MESSAGES], [/* Define if your <locale.h> file defines LC_MESSAGES. */
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LC_MESSAGES])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_LC_MESSAGES$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_LC_MESSAGES], [/* Define if your <locale.h> file defines LC_MESSAGES. */
 @%:@undef HAVE_LC_MESSAGES])
-m4trace:configure.ac:697: -1- AC_SUBST([INTLBISON])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([INTLBISON])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^INTLBISON$])
-m4trace:configure.ac:697: -1- AM_NLS
-m4trace:configure.ac:697: -1- AC_SUBST([USE_NLS])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([USE_NLS])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^USE_NLS$])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:676: -1- AC_SUBST([INTLBISON])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([INTLBISON])
+m4trace:configure.in:676: -1- m4_pattern_allow([^INTLBISON$])
+m4trace:configure.in:676: -1- AM_NLS
+m4trace:configure.in:676: -1- AC_SUBST([USE_NLS])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([USE_NLS])
+m4trace:configure.in:676: -1- m4_pattern_allow([^USE_NLS$])
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:2111: AM_GNU_GETTEXT is expanded from...
-configure.ac:697: the top level])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([ENABLE_NLS])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^ENABLE_NLS$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([ENABLE_NLS], [/* Define to 1 if translation of program messages to the user\'s native
+configure.in:676: the top level])
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([ENABLE_NLS])
+m4trace:configure.in:676: -1- m4_pattern_allow([^ENABLE_NLS$])
+m4trace:configure.in:676: -1- AH_OUTPUT([ENABLE_NLS], [/* Define to 1 if translation of program messages to the user\'s native
    language is requested. */
 @%:@undef ENABLE_NLS])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETTEXT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_GETTEXT$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_GETTEXT], [/* Define if the GNU gettext() function is already present or preinstalled. */
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETTEXT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_GETTEXT$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_GETTEXT], [/* Define if the GNU gettext() function is already present or preinstalled. */
 @%:@undef HAVE_GETTEXT])
-m4trace:configure.ac:697: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DCGETTEXT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^HAVE_DCGETTEXT$])
-m4trace:configure.ac:697: -1- AH_OUTPUT([HAVE_DCGETTEXT], [/* Define if the GNU dcgettext() function is already present or preinstalled.
+m4trace:configure.in:676: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DCGETTEXT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^HAVE_DCGETTEXT$])
+m4trace:configure.in:676: -1- AH_OUTPUT([HAVE_DCGETTEXT], [/* Define if the GNU dcgettext() function is already present or preinstalled.
    */
 @%:@undef HAVE_DCGETTEXT])
-m4trace:configure.ac:697: -1- AC_SUBST([BUILD_INCLUDED_LIBINTL])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([BUILD_INCLUDED_LIBINTL])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^BUILD_INCLUDED_LIBINTL$])
-m4trace:configure.ac:697: -1- AC_SUBST([USE_INCLUDED_LIBINTL])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([USE_INCLUDED_LIBINTL])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^USE_INCLUDED_LIBINTL$])
-m4trace:configure.ac:697: -1- AC_SUBST([CATOBJEXT])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([CATOBJEXT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^CATOBJEXT$])
-m4trace:configure.ac:697: -1- AC_SUBST([DATADIRNAME])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([DATADIRNAME])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^DATADIRNAME$])
-m4trace:configure.ac:697: -1- AC_SUBST([INSTOBJEXT])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([INSTOBJEXT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^INSTOBJEXT$])
-m4trace:configure.ac:697: -1- AC_SUBST([GENCAT])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([GENCAT])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^GENCAT$])
-m4trace:configure.ac:697: -1- AC_SUBST([INTLOBJS])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([INTLOBJS])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^INTLOBJS$])
-m4trace:configure.ac:697: -1- AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([INTL_LIBTOOL_SUFFIX_PREFIX])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^INTL_LIBTOOL_SUFFIX_PREFIX$])
-m4trace:configure.ac:697: -1- AC_SUBST([INTLLIBS])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([INTLLIBS])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^INTLLIBS$])
-m4trace:configure.ac:697: -1- AC_SUBST([LIBINTL])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([LIBINTL])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^LIBINTL$])
-m4trace:configure.ac:697: -1- AC_SUBST([LTLIBINTL])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([LTLIBINTL])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^LTLIBINTL$])
-m4trace:configure.ac:697: -1- AC_SUBST([POSUB])
-m4trace:configure.ac:697: -1- AC_SUBST_TRACE([POSUB])
-m4trace:configure.ac:697: -1- m4_pattern_allow([^POSUB$])
-m4trace:configure.ac:700: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR\'.
+m4trace:configure.in:676: -1- AC_SUBST([BUILD_INCLUDED_LIBINTL])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([BUILD_INCLUDED_LIBINTL])
+m4trace:configure.in:676: -1- m4_pattern_allow([^BUILD_INCLUDED_LIBINTL$])
+m4trace:configure.in:676: -1- AC_SUBST([USE_INCLUDED_LIBINTL])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([USE_INCLUDED_LIBINTL])
+m4trace:configure.in:676: -1- m4_pattern_allow([^USE_INCLUDED_LIBINTL$])
+m4trace:configure.in:676: -1- AC_SUBST([CATOBJEXT])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([CATOBJEXT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^CATOBJEXT$])
+m4trace:configure.in:676: -1- AC_SUBST([DATADIRNAME])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([DATADIRNAME])
+m4trace:configure.in:676: -1- m4_pattern_allow([^DATADIRNAME$])
+m4trace:configure.in:676: -1- AC_SUBST([INSTOBJEXT])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([INSTOBJEXT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^INSTOBJEXT$])
+m4trace:configure.in:676: -1- AC_SUBST([GENCAT])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([GENCAT])
+m4trace:configure.in:676: -1- m4_pattern_allow([^GENCAT$])
+m4trace:configure.in:676: -1- AC_SUBST([INTLOBJS])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([INTLOBJS])
+m4trace:configure.in:676: -1- m4_pattern_allow([^INTLOBJS$])
+m4trace:configure.in:676: -1- AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([INTL_LIBTOOL_SUFFIX_PREFIX])
+m4trace:configure.in:676: -1- m4_pattern_allow([^INTL_LIBTOOL_SUFFIX_PREFIX$])
+m4trace:configure.in:676: -1- AC_SUBST([INTLLIBS])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([INTLLIBS])
+m4trace:configure.in:676: -1- m4_pattern_allow([^INTLLIBS$])
+m4trace:configure.in:676: -1- AC_SUBST([LIBINTL])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([LIBINTL])
+m4trace:configure.in:676: -1- m4_pattern_allow([^LIBINTL$])
+m4trace:configure.in:676: -1- AC_SUBST([LTLIBINTL])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([LTLIBINTL])
+m4trace:configure.in:676: -1- m4_pattern_allow([^LTLIBINTL$])
+m4trace:configure.in:676: -1- AC_SUBST([POSUB])
+m4trace:configure.in:676: -1- AC_SUBST_TRACE([POSUB])
+m4trace:configure.in:676: -1- m4_pattern_allow([^POSUB$])
+m4trace:configure.in:679: -1- AH_OUTPUT([HAVE_DIRENT_H], [/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR\'.
    */
 @%:@undef HAVE_DIRENT_H])
-m4trace:configure.ac:700: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR\'.
+m4trace:configure.in:679: -1- AH_OUTPUT([HAVE_SYS_NDIR_H], [/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR\'.
    */
 @%:@undef HAVE_SYS_NDIR_H])
-m4trace:configure.ac:700: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR\'.
+m4trace:configure.in:679: -1- AH_OUTPUT([HAVE_SYS_DIR_H], [/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR\'.
    */
 @%:@undef HAVE_SYS_DIR_H])
-m4trace:configure.ac:700: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR\'. */
+m4trace:configure.in:679: -1- AH_OUTPUT([HAVE_NDIR_H], [/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR\'. */
 @%:@undef HAVE_NDIR_H])
-m4trace:configure.ac:701: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
-m4trace:configure.ac:701: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$])
-m4trace:configure.ac:701: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+m4trace:configure.in:680: -1- AC_DEFINE_TRACE_LITERAL([TIME_WITH_SYS_TIME])
+m4trace:configure.in:680: -1- m4_pattern_allow([^TIME_WITH_SYS_TIME$])
+m4trace:configure.in:680: -1- AH_OUTPUT([TIME_WITH_SYS_TIME], [/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
 @%:@undef TIME_WITH_SYS_TIME])
-m4trace:configure.ac:703: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
+m4trace:configure.in:682: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the <inttypes.h> header file. */
 @%:@undef HAVE_INTTYPES_H])
-m4trace:configure.ac:703: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INTTYPES_H])
-m4trace:configure.ac:703: -1- m4_pattern_allow([^HAVE_INTTYPES_H$])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+m4trace:configure.in:682: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INTTYPES_H])
+m4trace:configure.in:682: -1- m4_pattern_allow([^HAVE_INTTYPES_H$])
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
 @%:@undef HAVE_UNISTD_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
 @%:@undef HAVE_STDLIB_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_STDARG_H], [/* Define to 1 if you have the <stdarg.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STDARG_H], [/* Define to 1 if you have the <stdarg.h> header file. */
 @%:@undef HAVE_STDARG_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_VARARGS_H], [/* Define to 1 if you have the <varargs.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_VARARGS_H], [/* Define to 1 if you have the <varargs.h> header file. */
 @%:@undef HAVE_VARARGS_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the <limits.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_LIMITS_H], [/* Define to 1 if you have the <limits.h> header file. */
 @%:@undef HAVE_LIMITS_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the <string.h> header file. */
 @%:@undef HAVE_STRING_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the <memory.h> header file. */
 @%:@undef HAVE_MEMORY_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the <locale.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_LOCALE_H], [/* Define to 1 if you have the <locale.h> header file. */
 @%:@undef HAVE_LOCALE_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_TERMCAP_H], [/* Define to 1 if you have the <termcap.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_TERMCAP_H], [/* Define to 1 if you have the <termcap.h> header file. */
 @%:@undef HAVE_TERMCAP_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_TERMIO_H], [/* Define to 1 if you have the <termio.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_TERMIO_H], [/* Define to 1 if you have the <termio.h> header file. */
 @%:@undef HAVE_TERMIO_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_TERMIOS_H], [/* Define to 1 if you have the <termios.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_TERMIOS_H], [/* Define to 1 if you have the <termios.h> header file. */
 @%:@undef HAVE_TERMIOS_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the <dlfcn.h> header file. */
 @%:@undef HAVE_DLFCN_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if you have the <stdbool.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STDBOOL_H], [/* Define to 1 if you have the <stdbool.h> header file. */
 @%:@undef HAVE_STDBOOL_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_STDDEF_H], [/* Define to 1 if you have the <stddef.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STDDEF_H], [/* Define to 1 if you have the <stddef.h> header file. */
 @%:@undef HAVE_STDDEF_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the <stdint.h> header file. */
 @%:@undef HAVE_STDINT_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_NETDB_H], [/* Define to 1 if you have the <netdb.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_NETDB_H], [/* Define to 1 if you have the <netdb.h> header file. */
 @%:@undef HAVE_NETDB_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_PWD_H], [/* Define to 1 if you have the <pwd.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_PWD_H], [/* Define to 1 if you have the <pwd.h> header file. */
 @%:@undef HAVE_PWD_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_GRP_H], [/* Define to 1 if you have the <grp.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_GRP_H], [/* Define to 1 if you have the <grp.h> header file. */
 @%:@undef HAVE_GRP_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the <strings.h> header file. */
 @%:@undef HAVE_STRINGS_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_REGEX_H], [/* Define to 1 if you have the <regex.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_REGEX_H], [/* Define to 1 if you have the <regex.h> header file. */
 @%:@undef HAVE_REGEX_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_SYSLOG_H], [/* Define to 1 if you have the <syslog.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_SYSLOG_H], [/* Define to 1 if you have the <syslog.h> header file. */
 @%:@undef HAVE_SYSLOG_H])
-m4trace:configure.ac:705: -1- AH_OUTPUT([HAVE_ULIMIT_H], [/* Define to 1 if you have the <ulimit.h> header file. */
+m4trace:configure.in:684: -1- AH_OUTPUT([HAVE_ULIMIT_H], [/* Define to 1 if you have the <ulimit.h> header file. */
 @%:@undef HAVE_ULIMIT_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_PTE_H], [/* Define to 1 if you have the <sys/pte.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_PTE_H], [/* Define to 1 if you have the <sys/pte.h> header file. */
 @%:@undef HAVE_SYS_PTE_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_STREAM_H], [/* Define to 1 if you have the <sys/stream.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_STREAM_H], [/* Define to 1 if you have the <sys/stream.h> header file. */
 @%:@undef HAVE_SYS_STREAM_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the <sys/select.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_SELECT_H], [/* Define to 1 if you have the <sys/select.h> header file. */
 @%:@undef HAVE_SYS_SELECT_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_FILE_H], [/* Define to 1 if you have the <sys/file.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_FILE_H], [/* Define to 1 if you have the <sys/file.h> header file. */
 @%:@undef HAVE_SYS_FILE_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_RESOURCE_H], [/* Define to 1 if you have the <sys/resource.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_RESOURCE_H], [/* Define to 1 if you have the <sys/resource.h> header file. */
 @%:@undef HAVE_SYS_RESOURCE_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
 @%:@undef HAVE_SYS_PARAM_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the <sys/socket.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_SOCKET_H], [/* Define to 1 if you have the <sys/socket.h> header file. */
 @%:@undef HAVE_SYS_SOCKET_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the <sys/stat.h> header file. */
 @%:@undef HAVE_SYS_STAT_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
 @%:@undef HAVE_SYS_TIME_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_TIMES_H], [/* Define to 1 if you have the <sys/times.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_TIMES_H], [/* Define to 1 if you have the <sys/times.h> header file. */
 @%:@undef HAVE_SYS_TIMES_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the <sys/types.h> header file. */
 @%:@undef HAVE_SYS_TYPES_H])
-m4trace:configure.ac:709: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have the <sys/wait.h> header file. */
+m4trace:configure.in:688: -1- AH_OUTPUT([HAVE_SYS_WAIT_H], [/* Define to 1 if you have the <sys/wait.h> header file. */
 @%:@undef HAVE_SYS_WAIT_H])
-m4trace:configure.ac:712: -1- AH_OUTPUT([HAVE_NETINET_IN_H], [/* Define to 1 if you have the <netinet/in.h> header file. */
+m4trace:configure.in:691: -1- AH_OUTPUT([HAVE_NETINET_IN_H], [/* Define to 1 if you have the <netinet/in.h> header file. */
 @%:@undef HAVE_NETINET_IN_H])
-m4trace:configure.ac:712: -1- AH_OUTPUT([HAVE_ARPA_INET_H], [/* Define to 1 if you have the <arpa/inet.h> header file. */
+m4trace:configure.in:691: -1- AH_OUTPUT([HAVE_ARPA_INET_H], [/* Define to 1 if you have the <arpa/inet.h> header file. */
 @%:@undef HAVE_ARPA_INET_H])
-m4trace:configure.ac:723: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA_H])
-m4trace:configure.ac:723: -1- m4_pattern_allow([^HAVE_ALLOCA_H$])
-m4trace:configure.ac:723: -1- AH_OUTPUT([HAVE_ALLOCA_H], [/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+m4trace:configure.in:702: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA_H])
+m4trace:configure.in:702: -1- m4_pattern_allow([^HAVE_ALLOCA_H$])
+m4trace:configure.in:702: -1- AH_OUTPUT([HAVE_ALLOCA_H], [/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
    */
 @%:@undef HAVE_ALLOCA_H])
-m4trace:configure.ac:723: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA])
-m4trace:configure.ac:723: -1- m4_pattern_allow([^HAVE_ALLOCA$])
-m4trace:configure.ac:723: -1- AH_OUTPUT([HAVE_ALLOCA], [/* Define to 1 if you have `alloca\', as a function or macro. */
+m4trace:configure.in:702: -1- AC_DEFINE_TRACE_LITERAL([HAVE_ALLOCA])
+m4trace:configure.in:702: -1- m4_pattern_allow([^HAVE_ALLOCA$])
+m4trace:configure.in:702: -1- AH_OUTPUT([HAVE_ALLOCA], [/* Define to 1 if you have `alloca\', as a function or macro. */
 @%:@undef HAVE_ALLOCA])
-m4trace:configure.ac:723: -1- AC_LIBSOURCE([alloca.c])
-m4trace:configure.ac:723: -1- AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])
-m4trace:configure.ac:723: -1- AC_SUBST_TRACE([ALLOCA])
-m4trace:configure.ac:723: -1- m4_pattern_allow([^ALLOCA$])
-m4trace:configure.ac:723: -1- AC_DEFINE_TRACE_LITERAL([C_ALLOCA])
-m4trace:configure.ac:723: -1- m4_pattern_allow([^C_ALLOCA$])
-m4trace:configure.ac:723: -1- AH_OUTPUT([C_ALLOCA], [/* Define to 1 if using `alloca.c\'. */
+m4trace:configure.in:702: -1- AC_LIBSOURCE([alloca.c])
+m4trace:configure.in:702: -1- AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])
+m4trace:configure.in:702: -1- AC_SUBST_TRACE([ALLOCA])
+m4trace:configure.in:702: -1- m4_pattern_allow([^ALLOCA$])
+m4trace:configure.in:702: -1- AC_DEFINE_TRACE_LITERAL([C_ALLOCA])
+m4trace:configure.in:702: -1- m4_pattern_allow([^C_ALLOCA$])
+m4trace:configure.in:702: -1- AH_OUTPUT([C_ALLOCA], [/* Define to 1 if using `alloca.c\'. */
 @%:@undef C_ALLOCA])
-m4trace:configure.ac:723: -1- AC_DEFINE_TRACE_LITERAL([CRAY_STACKSEG_END])
-m4trace:configure.ac:723: -1- m4_pattern_allow([^CRAY_STACKSEG_END$])
-m4trace:configure.ac:723: -1- AH_OUTPUT([CRAY_STACKSEG_END], [/* Define to one of `_getb67\', `GETB67\', `getb67\' for Cray-2 and Cray-YMP
+m4trace:configure.in:702: -1- AC_DEFINE_TRACE_LITERAL([CRAY_STACKSEG_END])
+m4trace:configure.in:702: -1- m4_pattern_allow([^CRAY_STACKSEG_END$])
+m4trace:configure.in:702: -1- AH_OUTPUT([CRAY_STACKSEG_END], [/* Define to one of `_getb67\', `GETB67\', `getb67\' for Cray-2 and Cray-YMP
    systems. This function is required for `alloca.c\' support on those systems.
    */
 @%:@undef CRAY_STACKSEG_END])
-m4trace:configure.ac:723: -1- AH_OUTPUT([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the
+m4trace:configure.in:702: -1- AH_OUTPUT([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the
    direction of stack growth for your system; otherwise it will be
    automatically deduced at runtime.
        STACK_DIRECTION > 0 => grows toward higher addresses
        STACK_DIRECTION < 0 => grows toward lower addresses
        STACK_DIRECTION = 0 => direction of growth unknown */
 @%:@undef STACK_DIRECTION])
-m4trace:configure.ac:723: -1- AC_DEFINE_TRACE_LITERAL([STACK_DIRECTION])
-m4trace:configure.ac:723: -1- m4_pattern_allow([^STACK_DIRECTION$])
-m4trace:configure.ac:724: -1- AC_DEFINE_TRACE_LITERAL([GETPGRP_VOID])
-m4trace:configure.ac:724: -1- m4_pattern_allow([^GETPGRP_VOID$])
-m4trace:configure.ac:724: -1- AH_OUTPUT([GETPGRP_VOID], [/* Define to 1 if the `getpgrp\' function requires zero arguments. */
+m4trace:configure.in:702: -1- AC_DEFINE_TRACE_LITERAL([STACK_DIRECTION])
+m4trace:configure.in:702: -1- m4_pattern_allow([^STACK_DIRECTION$])
+m4trace:configure.in:703: -1- AC_DEFINE_TRACE_LITERAL([GETPGRP_VOID])
+m4trace:configure.in:703: -1- m4_pattern_allow([^GETPGRP_VOID$])
+m4trace:configure.in:703: -1- AH_OUTPUT([GETPGRP_VOID], [/* Define to 1 if the `getpgrp\' function requires zero arguments. */
 @%:@undef GETPGRP_VOID])
-m4trace:configure.ac:725: -1- _m4_warn([obsolete], [The macro `AC_FUNC_SETVBUF_REVERSED' is obsolete.  Remove it and all references to SETVBUF_REVERSED.], [../../lib/autoconf/functions.m4:1710: AC_FUNC_SETVBUF_REVERSED is expanded from...
-configure.ac:725: the top level])
-m4trace:configure.ac:726: -1- AH_OUTPUT([HAVE_VPRINTF], [/* Define to 1 if you have the `vprintf\' function. */
+m4trace:configure.in:704: -1- _m4_warn([obsolete], [The macro `AC_FUNC_SETVBUF_REVERSED' is obsolete.  Remove it and all references to SETVBUF_REVERSED.], [../../lib/autoconf/functions.m4:1714: AC_FUNC_SETVBUF_REVERSED is expanded from...
+configure.in:704: the top level])
+m4trace:configure.in:705: -1- AH_OUTPUT([HAVE_VPRINTF], [/* Define to 1 if you have the `vprintf\' function. */
 @%:@undef HAVE_VPRINTF])
-m4trace:configure.ac:726: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VPRINTF])
-m4trace:configure.ac:726: -1- m4_pattern_allow([^HAVE_VPRINTF$])
-m4trace:configure.ac:726: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOPRNT])
-m4trace:configure.ac:726: -1- m4_pattern_allow([^HAVE_DOPRNT$])
-m4trace:configure.ac:726: -1- AH_OUTPUT([HAVE_DOPRNT], [/* Define to 1 if you don\'t have `vprintf\' but do have `_doprnt.\' */
+m4trace:configure.in:705: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VPRINTF])
+m4trace:configure.in:705: -1- m4_pattern_allow([^HAVE_VPRINTF$])
+m4trace:configure.in:705: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DOPRNT])
+m4trace:configure.in:705: -1- m4_pattern_allow([^HAVE_DOPRNT$])
+m4trace:configure.in:705: -1- AH_OUTPUT([HAVE_DOPRNT], [/* Define to 1 if you don\'t have `vprintf\' but do have `_doprnt.\' */
 @%:@undef HAVE_DOPRNT])
-m4trace:configure.ac:727: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCOLL])
-m4trace:configure.ac:727: -1- m4_pattern_allow([^HAVE_STRCOLL$])
-m4trace:configure.ac:727: -1- AH_OUTPUT([HAVE_STRCOLL], [/* Define to 1 if you have the `strcoll\' function and it is properly defined.
+m4trace:configure.in:706: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCOLL])
+m4trace:configure.in:706: -1- m4_pattern_allow([^HAVE_STRCOLL$])
+m4trace:configure.in:706: -1- AH_OUTPUT([HAVE_STRCOLL], [/* Define to 1 if you have the `strcoll\' function and it is properly defined.
    */
 @%:@undef HAVE_STRCOLL])
-m4trace:configure.ac:748: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VPRINTF])
-m4trace:configure.ac:748: -1- m4_pattern_allow([^HAVE_VPRINTF$])
-m4trace:configure.ac:753: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS vprint.$ac_objext"])
-m4trace:configure.ac:753: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:753: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:753: -1- AC_LIBSOURCE([vprint.c])
-m4trace:configure.ac:757: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/types.m4:746: AC_TYPE_SIGNAL is expanded from...
-configure.ac:757: the top level])
-m4trace:configure.ac:757: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])
-m4trace:configure.ac:757: -1- m4_pattern_allow([^RETSIGTYPE$])
-m4trace:configure.ac:757: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */
+m4trace:configure.in:727: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VPRINTF])
+m4trace:configure.in:727: -1- m4_pattern_allow([^HAVE_VPRINTF$])
+m4trace:configure.in:732: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS vprint.$ac_objext"])
+m4trace:configure.in:732: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:732: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:732: -1- AC_LIBSOURCE([vprint.c])
+m4trace:configure.in:736: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from...
+configure.in:736: the top level])
+m4trace:configure.in:736: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])
+m4trace:configure.in:736: -1- m4_pattern_allow([^RETSIGTYPE$])
+m4trace:configure.in:736: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */
 @%:@undef RETSIGTYPE])
-m4trace:configure.ac:760: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETOSTYPE])
-m4trace:configure.ac:760: -2- m4_pattern_allow([^HAVE_SETOSTYPE$])
-m4trace:configure.ac:761: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WAIT3])
-m4trace:configure.ac:761: -2- m4_pattern_allow([^HAVE_WAIT3$])
-m4trace:configure.ac:764: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MKFIFO])
-m4trace:configure.ac:764: -2- m4_pattern_allow([^HAVE_MKFIFO$])
-m4trace:configure.ac:764: -2- AC_DEFINE_TRACE_LITERAL([MKFIFO_MISSING])
-m4trace:configure.ac:764: -2- m4_pattern_allow([^MKFIFO_MISSING$])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_DUP2], [/* Define to 1 if you have the `dup2\' function. */
+m4trace:configure.in:739: -2- AC_DEFINE_TRACE_LITERAL([HAVE_SETOSTYPE])
+m4trace:configure.in:739: -2- m4_pattern_allow([^HAVE_SETOSTYPE$])
+m4trace:configure.in:740: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WAIT3])
+m4trace:configure.in:740: -2- m4_pattern_allow([^HAVE_WAIT3$])
+m4trace:configure.in:743: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MKFIFO])
+m4trace:configure.in:743: -2- m4_pattern_allow([^HAVE_MKFIFO$])
+m4trace:configure.in:743: -2- AC_DEFINE_TRACE_LITERAL([MKFIFO_MISSING])
+m4trace:configure.in:743: -2- m4_pattern_allow([^MKFIFO_MISSING$])
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_DUP2], [/* Define to 1 if you have the `dup2\' function. */
 @%:@undef HAVE_DUP2])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_EACCESS], [/* Define to 1 if you have the `eaccess\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_EACCESS], [/* Define to 1 if you have the `eaccess\' function. */
 @%:@undef HAVE_EACCESS])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_FCNTL], [/* Define to 1 if you have the `fcntl\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_FCNTL], [/* Define to 1 if you have the `fcntl\' function. */
 @%:@undef HAVE_FCNTL])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETDTABLESIZE], [/* Define to 1 if you have the `getdtablesize\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETDTABLESIZE], [/* Define to 1 if you have the `getdtablesize\' function. */
 @%:@undef HAVE_GETDTABLESIZE])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETGROUPS], [/* Define to 1 if you have the `getgroups\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETGROUPS], [/* Define to 1 if you have the `getgroups\' function. */
 @%:@undef HAVE_GETGROUPS])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETHOSTNAME], [/* Define to 1 if you have the `gethostname\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETHOSTNAME], [/* Define to 1 if you have the `gethostname\' function. */
 @%:@undef HAVE_GETHOSTNAME])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
 @%:@undef HAVE_GETPAGESIZE])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETPEERNAME], [/* Define to 1 if you have the `getpeername\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETPEERNAME], [/* Define to 1 if you have the `getpeername\' function. */
 @%:@undef HAVE_GETPEERNAME])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETRLIMIT], [/* Define to 1 if you have the `getrlimit\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETRLIMIT], [/* Define to 1 if you have the `getrlimit\' function. */
 @%:@undef HAVE_GETRLIMIT])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETRUSAGE], [/* Define to 1 if you have the `getrusage\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETRUSAGE], [/* Define to 1 if you have the `getrusage\' function. */
 @%:@undef HAVE_GETRUSAGE])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_GETTIMEOFDAY], [/* Define to 1 if you have the `gettimeofday\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_GETTIMEOFDAY], [/* Define to 1 if you have the `gettimeofday\' function. */
 @%:@undef HAVE_GETTIMEOFDAY])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_KILL], [/* Define to 1 if you have the `kill\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_KILL], [/* Define to 1 if you have the `kill\' function. */
 @%:@undef HAVE_KILL])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_KILLPG], [/* Define to 1 if you have the `killpg\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_KILLPG], [/* Define to 1 if you have the `killpg\' function. */
 @%:@undef HAVE_KILLPG])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_LSTAT], [/* Define to 1 if you have the `lstat\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_LSTAT], [/* Define to 1 if you have the `lstat\' function. */
 @%:@undef HAVE_LSTAT])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_READLINK], [/* Define to 1 if you have the `readlink\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_READLINK], [/* Define to 1 if you have the `readlink\' function. */
 @%:@undef HAVE_READLINK])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_SBRK], [/* Define to 1 if you have the `sbrk\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_SBRK], [/* Define to 1 if you have the `sbrk\' function. */
 @%:@undef HAVE_SBRK])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_SELECT], [/* Define to 1 if you have the `select\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_SELECT], [/* Define to 1 if you have the `select\' function. */
 @%:@undef HAVE_SELECT])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_SETDTABLESIZE], [/* Define to 1 if you have the `setdtablesize\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_SETDTABLESIZE], [/* Define to 1 if you have the `setdtablesize\' function. */
 @%:@undef HAVE_SETDTABLESIZE])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_SETITIMER], [/* Define to 1 if you have the `setitimer\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_SETITIMER], [/* Define to 1 if you have the `setitimer\' function. */
 @%:@undef HAVE_SETITIMER])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_TCGETPGRP], [/* Define to 1 if you have the `tcgetpgrp\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_TCGETPGRP], [/* Define to 1 if you have the `tcgetpgrp\' function. */
 @%:@undef HAVE_TCGETPGRP])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_UNAME], [/* Define to 1 if you have the `uname\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_UNAME], [/* Define to 1 if you have the `uname\' function. */
 @%:@undef HAVE_UNAME])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_ULIMIT], [/* Define to 1 if you have the `ulimit\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_ULIMIT], [/* Define to 1 if you have the `ulimit\' function. */
 @%:@undef HAVE_ULIMIT])
-m4trace:configure.ac:767: -1- AH_OUTPUT([HAVE_WAITPID], [/* Define to 1 if you have the `waitpid\' function. */
+m4trace:configure.in:746: -1- AH_OUTPUT([HAVE_WAITPID], [/* Define to 1 if you have the `waitpid\' function. */
 @%:@undef HAVE_WAITPID])
-m4trace:configure.ac:771: -1- AH_OUTPUT([HAVE_RENAME], [/* Define to 1 if you have the `rename\' function. */
+m4trace:configure.in:750: -1- AH_OUTPUT([HAVE_RENAME], [/* Define to 1 if you have the `rename\' function. */
 @%:@undef HAVE_RENAME])
-m4trace:configure.ac:771: -1- AC_DEFINE_TRACE_LITERAL([HAVE_RENAME])
-m4trace:configure.ac:771: -1- m4_pattern_allow([^HAVE_RENAME$])
-m4trace:configure.ac:771: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS rename.$ac_objext"])
-m4trace:configure.ac:771: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:771: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:771: -1- AC_LIBSOURCE([rename.c])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_BCOPY], [/* Define to 1 if you have the `bcopy\' function. */
+m4trace:configure.in:750: -1- AC_DEFINE_TRACE_LITERAL([HAVE_RENAME])
+m4trace:configure.in:750: -1- m4_pattern_allow([^HAVE_RENAME$])
+m4trace:configure.in:750: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS rename.$ac_objext"])
+m4trace:configure.in:750: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:750: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:750: -1- AC_LIBSOURCE([rename.c])
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_BCOPY], [/* Define to 1 if you have the `bcopy\' function. */
 @%:@undef HAVE_BCOPY])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_BZERO], [/* Define to 1 if you have the `bzero\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_BZERO], [/* Define to 1 if you have the `bzero\' function. */
 @%:@undef HAVE_BZERO])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_CONFSTR], [/* Define to 1 if you have the `confstr\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_CONFSTR], [/* Define to 1 if you have the `confstr\' function. */
 @%:@undef HAVE_CONFSTR])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_FACCESSAT], [/* Define to 1 if you have the `faccessat\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_FACCESSAT], [/* Define to 1 if you have the `faccessat\' function. */
 @%:@undef HAVE_FACCESSAT])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_FNMATCH], [/* Define to 1 if you have the `fnmatch\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_FNMATCH], [/* Define to 1 if you have the `fnmatch\' function. */
 @%:@undef HAVE_FNMATCH])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_GETADDRINFO], [/* Define to 1 if you have the `getaddrinfo\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_GETADDRINFO], [/* Define to 1 if you have the `getaddrinfo\' function. */
 @%:@undef HAVE_GETADDRINFO])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_GETHOSTBYNAME], [/* Define to 1 if you have the `gethostbyname\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_GETHOSTBYNAME], [/* Define to 1 if you have the `gethostbyname\' function. */
 @%:@undef HAVE_GETHOSTBYNAME])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_GETSERVBYNAME], [/* Define to 1 if you have the `getservbyname\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_GETSERVBYNAME], [/* Define to 1 if you have the `getservbyname\' function. */
 @%:@undef HAVE_GETSERVBYNAME])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_GETSERVENT], [/* Define to 1 if you have the `getservent\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_GETSERVENT], [/* Define to 1 if you have the `getservent\' function. */
 @%:@undef HAVE_GETSERVENT])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_INET_ATON], [/* Define to 1 if you have the `inet_aton\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_INET_ATON], [/* Define to 1 if you have the `inet_aton\' function. */
 @%:@undef HAVE_INET_ATON])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_IMAXDIV], [/* Define to 1 if you have the `imaxdiv\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_IMAXDIV], [/* Define to 1 if you have the `imaxdiv\' function. */
 @%:@undef HAVE_IMAXDIV])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_MEMMOVE], [/* Define to 1 if you have the `memmove\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_MEMMOVE], [/* Define to 1 if you have the `memmove\' function. */
 @%:@undef HAVE_MEMMOVE])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_PATHCONF], [/* Define to 1 if you have the `pathconf\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_PATHCONF], [/* Define to 1 if you have the `pathconf\' function. */
 @%:@undef HAVE_PATHCONF])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_PUTENV], [/* Define to 1 if you have the `putenv\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_PUTENV], [/* Define to 1 if you have the `putenv\' function. */
 @%:@undef HAVE_PUTENV])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_RAISE], [/* Define to 1 if you have the `raise\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_RAISE], [/* Define to 1 if you have the `raise\' function. */
 @%:@undef HAVE_RAISE])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_REGCOMP], [/* Define to 1 if you have the `regcomp\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_REGCOMP], [/* Define to 1 if you have the `regcomp\' function. */
 @%:@undef HAVE_REGCOMP])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_REGEXEC], [/* Define to 1 if you have the `regexec\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_REGEXEC], [/* Define to 1 if you have the `regexec\' function. */
 @%:@undef HAVE_REGEXEC])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_SETENV], [/* Define to 1 if you have the `setenv\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_SETENV], [/* Define to 1 if you have the `setenv\' function. */
 @%:@undef HAVE_SETENV])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_SETLINEBUF], [/* Define to 1 if you have the `setlinebuf\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_SETLINEBUF], [/* Define to 1 if you have the `setlinebuf\' function. */
 @%:@undef HAVE_SETLINEBUF])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the `setlocale\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_SETLOCALE], [/* Define to 1 if you have the `setlocale\' function. */
 @%:@undef HAVE_SETLOCALE])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_SETVBUF], [/* Define to 1 if you have the `setvbuf\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_SETVBUF], [/* Define to 1 if you have the `setvbuf\' function. */
 @%:@undef HAVE_SETVBUF])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_SIGINTERRUPT], [/* Define to 1 if you have the `siginterrupt\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_SIGINTERRUPT], [/* Define to 1 if you have the `siginterrupt\' function. */
 @%:@undef HAVE_SIGINTERRUPT])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_STRCHR], [/* Define to 1 if you have the `strchr\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_STRCHR], [/* Define to 1 if you have the `strchr\' function. */
 @%:@undef HAVE_STRCHR])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_SYSCONF], [/* Define to 1 if you have the `sysconf\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_SYSCONF], [/* Define to 1 if you have the `sysconf\' function. */
 @%:@undef HAVE_SYSCONF])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_SYSLOG], [/* Define to 1 if you have the `syslog\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_SYSLOG], [/* Define to 1 if you have the `syslog\' function. */
 @%:@undef HAVE_SYSLOG])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_TCGETATTR], [/* Define to 1 if you have the `tcgetattr\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_TCGETATTR], [/* Define to 1 if you have the `tcgetattr\' function. */
 @%:@undef HAVE_TCGETATTR])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_TIMES], [/* Define to 1 if you have the `times\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_TIMES], [/* Define to 1 if you have the `times\' function. */
 @%:@undef HAVE_TIMES])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_TTYNAME], [/* Define to 1 if you have the `ttyname\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_TTYNAME], [/* Define to 1 if you have the `ttyname\' function. */
 @%:@undef HAVE_TTYNAME])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_TZSET], [/* Define to 1 if you have the `tzset\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_TZSET], [/* Define to 1 if you have the `tzset\' function. */
 @%:@undef HAVE_TZSET])
-m4trace:configure.ac:774: -1- AH_OUTPUT([HAVE_UNSETENV], [/* Define to 1 if you have the `unsetenv\' function. */
+m4trace:configure.in:753: -1- AH_OUTPUT([HAVE_UNSETENV], [/* Define to 1 if you have the `unsetenv\' function. */
 @%:@undef HAVE_UNSETENV])
-m4trace:configure.ac:780: -1- AH_OUTPUT([HAVE_VASPRINTF], [/* Define to 1 if you have the `vasprintf\' function. */
+m4trace:configure.in:759: -1- AH_OUTPUT([HAVE_VASPRINTF], [/* Define to 1 if you have the `vasprintf\' function. */
 @%:@undef HAVE_VASPRINTF])
-m4trace:configure.ac:780: -1- AH_OUTPUT([HAVE_ASPRINTF], [/* Define to 1 if you have the `asprintf\' function. */
+m4trace:configure.in:759: -1- AH_OUTPUT([HAVE_ASPRINTF], [/* Define to 1 if you have the `asprintf\' function. */
 @%:@undef HAVE_ASPRINTF])
-m4trace:configure.ac:781: -1- AH_OUTPUT([HAVE_ISASCII], [/* Define to 1 if you have the `isascii\' function. */
+m4trace:configure.in:760: -1- AH_OUTPUT([HAVE_ISASCII], [/* Define to 1 if you have the `isascii\' function. */
 @%:@undef HAVE_ISASCII])
-m4trace:configure.ac:781: -1- AH_OUTPUT([HAVE_ISBLANK], [/* Define to 1 if you have the `isblank\' function. */
+m4trace:configure.in:760: -1- AH_OUTPUT([HAVE_ISBLANK], [/* Define to 1 if you have the `isblank\' function. */
 @%:@undef HAVE_ISBLANK])
-m4trace:configure.ac:781: -1- AH_OUTPUT([HAVE_ISGRAPH], [/* Define to 1 if you have the `isgraph\' function. */
+m4trace:configure.in:760: -1- AH_OUTPUT([HAVE_ISGRAPH], [/* Define to 1 if you have the `isgraph\' function. */
 @%:@undef HAVE_ISGRAPH])
-m4trace:configure.ac:781: -1- AH_OUTPUT([HAVE_ISPRINT], [/* Define to 1 if you have the `isprint\' function. */
+m4trace:configure.in:760: -1- AH_OUTPUT([HAVE_ISPRINT], [/* Define to 1 if you have the `isprint\' function. */
 @%:@undef HAVE_ISPRINT])
-m4trace:configure.ac:781: -1- AH_OUTPUT([HAVE_ISSPACE], [/* Define to 1 if you have the `isspace\' function. */
+m4trace:configure.in:760: -1- AH_OUTPUT([HAVE_ISSPACE], [/* Define to 1 if you have the `isspace\' function. */
 @%:@undef HAVE_ISSPACE])
-m4trace:configure.ac:781: -1- AH_OUTPUT([HAVE_ISXDIGIT], [/* Define to 1 if you have the `isxdigit\' function. */
+m4trace:configure.in:760: -1- AH_OUTPUT([HAVE_ISXDIGIT], [/* Define to 1 if you have the `isxdigit\' function. */
 @%:@undef HAVE_ISXDIGIT])
-m4trace:configure.ac:782: -1- AH_OUTPUT([HAVE_GETPWENT], [/* Define to 1 if you have the `getpwent\' function. */
+m4trace:configure.in:761: -1- AH_OUTPUT([HAVE_GETPWENT], [/* Define to 1 if you have the `getpwent\' function. */
 @%:@undef HAVE_GETPWENT])
-m4trace:configure.ac:782: -1- AH_OUTPUT([HAVE_GETPWNAM], [/* Define to 1 if you have the `getpwnam\' function. */
+m4trace:configure.in:761: -1- AH_OUTPUT([HAVE_GETPWNAM], [/* Define to 1 if you have the `getpwnam\' function. */
 @%:@undef HAVE_GETPWNAM])
-m4trace:configure.ac:782: -1- AH_OUTPUT([HAVE_GETPWUID], [/* Define to 1 if you have the `getpwuid\' function. */
+m4trace:configure.in:761: -1- AH_OUTPUT([HAVE_GETPWUID], [/* Define to 1 if you have the `getpwuid\' function. */
 @%:@undef HAVE_GETPWUID])
-m4trace:configure.ac:783: -1- AH_OUTPUT([HAVE_GETCWD], [/* Define to 1 if you have the `getcwd\' function. */
+m4trace:configure.in:762: -1- AH_OUTPUT([HAVE_GETCWD], [/* Define to 1 if you have the `getcwd\' function. */
 @%:@undef HAVE_GETCWD])
-m4trace:configure.ac:783: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETCWD])
-m4trace:configure.ac:783: -1- m4_pattern_allow([^HAVE_GETCWD$])
-m4trace:configure.ac:783: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS getcwd.$ac_objext"])
-m4trace:configure.ac:783: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:783: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:783: -1- AC_LIBSOURCE([getcwd.c])
-m4trace:configure.ac:783: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */
+m4trace:configure.in:762: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETCWD])
+m4trace:configure.in:762: -1- m4_pattern_allow([^HAVE_GETCWD$])
+m4trace:configure.in:762: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS getcwd.$ac_objext"])
+m4trace:configure.in:762: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:762: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:762: -1- AC_LIBSOURCE([getcwd.c])
+m4trace:configure.in:762: -1- AH_OUTPUT([HAVE_MEMSET], [/* Define to 1 if you have the `memset\' function. */
 @%:@undef HAVE_MEMSET])
-m4trace:configure.ac:783: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MEMSET])
-m4trace:configure.ac:783: -1- m4_pattern_allow([^HAVE_MEMSET$])
-m4trace:configure.ac:783: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS memset.$ac_objext"])
-m4trace:configure.ac:783: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:783: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:783: -1- AC_LIBSOURCE([memset.c])
-m4trace:configure.ac:784: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */
+m4trace:configure.in:762: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MEMSET])
+m4trace:configure.in:762: -1- m4_pattern_allow([^HAVE_MEMSET$])
+m4trace:configure.in:762: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS memset.$ac_objext"])
+m4trace:configure.in:762: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:762: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:762: -1- AC_LIBSOURCE([memset.c])
+m4trace:configure.in:763: -1- AH_OUTPUT([HAVE_STRCASECMP], [/* Define to 1 if you have the `strcasecmp\' function. */
 @%:@undef HAVE_STRCASECMP])
-m4trace:configure.ac:784: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCASECMP])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^HAVE_STRCASECMP$])
-m4trace:configure.ac:784: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strcasecmp.$ac_objext"])
-m4trace:configure.ac:784: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:784: -1- AC_LIBSOURCE([strcasecmp.c])
-m4trace:configure.ac:784: -1- AH_OUTPUT([HAVE_STRCASESTR], [/* Define to 1 if you have the `strcasestr\' function. */
+m4trace:configure.in:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCASECMP])
+m4trace:configure.in:763: -1- m4_pattern_allow([^HAVE_STRCASECMP$])
+m4trace:configure.in:763: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strcasecmp.$ac_objext"])
+m4trace:configure.in:763: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:763: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:763: -1- AC_LIBSOURCE([strcasecmp.c])
+m4trace:configure.in:763: -1- AH_OUTPUT([HAVE_STRCASESTR], [/* Define to 1 if you have the `strcasestr\' function. */
 @%:@undef HAVE_STRCASESTR])
-m4trace:configure.ac:784: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCASESTR])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^HAVE_STRCASESTR$])
-m4trace:configure.ac:784: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strcasestr.$ac_objext"])
-m4trace:configure.ac:784: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:784: -1- AC_LIBSOURCE([strcasestr.c])
-m4trace:configure.ac:784: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */
+m4trace:configure.in:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCASESTR])
+m4trace:configure.in:763: -1- m4_pattern_allow([^HAVE_STRCASESTR$])
+m4trace:configure.in:763: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strcasestr.$ac_objext"])
+m4trace:configure.in:763: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:763: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:763: -1- AC_LIBSOURCE([strcasestr.c])
+m4trace:configure.in:763: -1- AH_OUTPUT([HAVE_STRERROR], [/* Define to 1 if you have the `strerror\' function. */
 @%:@undef HAVE_STRERROR])
-m4trace:configure.ac:784: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRERROR])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^HAVE_STRERROR$])
-m4trace:configure.ac:784: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strerror.$ac_objext"])
-m4trace:configure.ac:784: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:784: -1- AC_LIBSOURCE([strerror.c])
-m4trace:configure.ac:784: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the `strftime\' function. */
+m4trace:configure.in:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRERROR])
+m4trace:configure.in:763: -1- m4_pattern_allow([^HAVE_STRERROR$])
+m4trace:configure.in:763: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strerror.$ac_objext"])
+m4trace:configure.in:763: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:763: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:763: -1- AC_LIBSOURCE([strerror.c])
+m4trace:configure.in:763: -1- AH_OUTPUT([HAVE_STRFTIME], [/* Define to 1 if you have the `strftime\' function. */
 @%:@undef HAVE_STRFTIME])
-m4trace:configure.ac:784: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^HAVE_STRFTIME$])
-m4trace:configure.ac:784: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strftime.$ac_objext"])
-m4trace:configure.ac:784: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:784: -1- AC_LIBSOURCE([strftime.c])
-m4trace:configure.ac:784: -1- AH_OUTPUT([HAVE_STRNLEN], [/* Define to 1 if you have the `strnlen\' function. */
+m4trace:configure.in:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRFTIME])
+m4trace:configure.in:763: -1- m4_pattern_allow([^HAVE_STRFTIME$])
+m4trace:configure.in:763: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strftime.$ac_objext"])
+m4trace:configure.in:763: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:763: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:763: -1- AC_LIBSOURCE([strftime.c])
+m4trace:configure.in:763: -1- AH_OUTPUT([HAVE_STRNLEN], [/* Define to 1 if you have the `strnlen\' function. */
 @%:@undef HAVE_STRNLEN])
-m4trace:configure.ac:784: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRNLEN])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^HAVE_STRNLEN$])
-m4trace:configure.ac:784: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strnlen.$ac_objext"])
-m4trace:configure.ac:784: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:784: -1- AC_LIBSOURCE([strnlen.c])
-m4trace:configure.ac:784: -1- AH_OUTPUT([HAVE_STRPBRK], [/* Define to 1 if you have the `strpbrk\' function. */
+m4trace:configure.in:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRNLEN])
+m4trace:configure.in:763: -1- m4_pattern_allow([^HAVE_STRNLEN$])
+m4trace:configure.in:763: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strnlen.$ac_objext"])
+m4trace:configure.in:763: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:763: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:763: -1- AC_LIBSOURCE([strnlen.c])
+m4trace:configure.in:763: -1- AH_OUTPUT([HAVE_STRPBRK], [/* Define to 1 if you have the `strpbrk\' function. */
 @%:@undef HAVE_STRPBRK])
-m4trace:configure.ac:784: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRPBRK])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^HAVE_STRPBRK$])
-m4trace:configure.ac:784: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strpbrk.$ac_objext"])
-m4trace:configure.ac:784: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:784: -1- AC_LIBSOURCE([strpbrk.c])
-m4trace:configure.ac:784: -1- AH_OUTPUT([HAVE_STRSTR], [/* Define to 1 if you have the `strstr\' function. */
+m4trace:configure.in:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRPBRK])
+m4trace:configure.in:763: -1- m4_pattern_allow([^HAVE_STRPBRK$])
+m4trace:configure.in:763: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strpbrk.$ac_objext"])
+m4trace:configure.in:763: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:763: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:763: -1- AC_LIBSOURCE([strpbrk.c])
+m4trace:configure.in:763: -1- AH_OUTPUT([HAVE_STRSTR], [/* Define to 1 if you have the `strstr\' function. */
 @%:@undef HAVE_STRSTR])
-m4trace:configure.ac:784: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRSTR])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^HAVE_STRSTR$])
-m4trace:configure.ac:784: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strstr.$ac_objext"])
-m4trace:configure.ac:784: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:784: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:784: -1- AC_LIBSOURCE([strstr.c])
-m4trace:configure.ac:785: -1- AH_OUTPUT([HAVE_STRTOD], [/* Define to 1 if you have the `strtod\' function. */
+m4trace:configure.in:763: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRSTR])
+m4trace:configure.in:763: -1- m4_pattern_allow([^HAVE_STRSTR$])
+m4trace:configure.in:763: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strstr.$ac_objext"])
+m4trace:configure.in:763: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:763: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:763: -1- AC_LIBSOURCE([strstr.c])
+m4trace:configure.in:764: -1- AH_OUTPUT([HAVE_STRTOD], [/* Define to 1 if you have the `strtod\' function. */
 @%:@undef HAVE_STRTOD])
-m4trace:configure.ac:785: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOD])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^HAVE_STRTOD$])
-m4trace:configure.ac:785: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtod.$ac_objext"])
-m4trace:configure.ac:785: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:785: -1- AC_LIBSOURCE([strtod.c])
-m4trace:configure.ac:785: -1- AH_OUTPUT([HAVE_STRTOL], [/* Define to 1 if you have the `strtol\' function. */
+m4trace:configure.in:764: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOD])
+m4trace:configure.in:764: -1- m4_pattern_allow([^HAVE_STRTOD$])
+m4trace:configure.in:764: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtod.$ac_objext"])
+m4trace:configure.in:764: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:764: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:764: -1- AC_LIBSOURCE([strtod.c])
+m4trace:configure.in:764: -1- AH_OUTPUT([HAVE_STRTOL], [/* Define to 1 if you have the `strtol\' function. */
 @%:@undef HAVE_STRTOL])
-m4trace:configure.ac:785: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOL])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^HAVE_STRTOL$])
-m4trace:configure.ac:785: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtol.$ac_objext"])
-m4trace:configure.ac:785: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:785: -1- AC_LIBSOURCE([strtol.c])
-m4trace:configure.ac:785: -1- AH_OUTPUT([HAVE_STRTOUL], [/* Define to 1 if you have the `strtoul\' function. */
+m4trace:configure.in:764: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOL])
+m4trace:configure.in:764: -1- m4_pattern_allow([^HAVE_STRTOL$])
+m4trace:configure.in:764: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtol.$ac_objext"])
+m4trace:configure.in:764: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:764: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:764: -1- AC_LIBSOURCE([strtol.c])
+m4trace:configure.in:764: -1- AH_OUTPUT([HAVE_STRTOUL], [/* Define to 1 if you have the `strtoul\' function. */
 @%:@undef HAVE_STRTOUL])
-m4trace:configure.ac:785: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOUL])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^HAVE_STRTOUL$])
-m4trace:configure.ac:785: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoul.$ac_objext"])
-m4trace:configure.ac:785: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:785: -1- AC_LIBSOURCE([strtoul.c])
-m4trace:configure.ac:785: -1- AH_OUTPUT([HAVE_STRTOLL], [/* Define to 1 if you have the `strtoll\' function. */
+m4trace:configure.in:764: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOUL])
+m4trace:configure.in:764: -1- m4_pattern_allow([^HAVE_STRTOUL$])
+m4trace:configure.in:764: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoul.$ac_objext"])
+m4trace:configure.in:764: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:764: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:764: -1- AC_LIBSOURCE([strtoul.c])
+m4trace:configure.in:764: -1- AH_OUTPUT([HAVE_STRTOLL], [/* Define to 1 if you have the `strtoll\' function. */
 @%:@undef HAVE_STRTOLL])
-m4trace:configure.ac:785: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOLL])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^HAVE_STRTOLL$])
-m4trace:configure.ac:785: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoll.$ac_objext"])
-m4trace:configure.ac:785: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:785: -1- AC_LIBSOURCE([strtoll.c])
-m4trace:configure.ac:785: -1- AH_OUTPUT([HAVE_STRTOULL], [/* Define to 1 if you have the `strtoull\' function. */
+m4trace:configure.in:764: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOLL])
+m4trace:configure.in:764: -1- m4_pattern_allow([^HAVE_STRTOLL$])
+m4trace:configure.in:764: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoll.$ac_objext"])
+m4trace:configure.in:764: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:764: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:764: -1- AC_LIBSOURCE([strtoll.c])
+m4trace:configure.in:764: -1- AH_OUTPUT([HAVE_STRTOULL], [/* Define to 1 if you have the `strtoull\' function. */
 @%:@undef HAVE_STRTOULL])
-m4trace:configure.ac:785: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOULL])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^HAVE_STRTOULL$])
-m4trace:configure.ac:785: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoull.$ac_objext"])
-m4trace:configure.ac:785: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:785: -1- AC_LIBSOURCE([strtoull.c])
-m4trace:configure.ac:785: -1- AH_OUTPUT([HAVE_STRTOIMAX], [/* Define to 1 if you have the `strtoimax\' function. */
+m4trace:configure.in:764: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOULL])
+m4trace:configure.in:764: -1- m4_pattern_allow([^HAVE_STRTOULL$])
+m4trace:configure.in:764: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoull.$ac_objext"])
+m4trace:configure.in:764: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:764: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:764: -1- AC_LIBSOURCE([strtoull.c])
+m4trace:configure.in:764: -1- AH_OUTPUT([HAVE_STRTOIMAX], [/* Define to 1 if you have the `strtoimax\' function. */
 @%:@undef HAVE_STRTOIMAX])
-m4trace:configure.ac:785: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOIMAX])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^HAVE_STRTOIMAX$])
-m4trace:configure.ac:785: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoimax.$ac_objext"])
-m4trace:configure.ac:785: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:785: -1- AC_LIBSOURCE([strtoimax.c])
-m4trace:configure.ac:785: -1- AH_OUTPUT([HAVE_STRTOUMAX], [/* Define to 1 if you have the `strtoumax\' function. */
+m4trace:configure.in:764: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOIMAX])
+m4trace:configure.in:764: -1- m4_pattern_allow([^HAVE_STRTOIMAX$])
+m4trace:configure.in:764: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoimax.$ac_objext"])
+m4trace:configure.in:764: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:764: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:764: -1- AC_LIBSOURCE([strtoimax.c])
+m4trace:configure.in:764: -1- AH_OUTPUT([HAVE_STRTOUMAX], [/* Define to 1 if you have the `strtoumax\' function. */
 @%:@undef HAVE_STRTOUMAX])
-m4trace:configure.ac:785: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOUMAX])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^HAVE_STRTOUMAX$])
-m4trace:configure.ac:785: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoumax.$ac_objext"])
-m4trace:configure.ac:785: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:785: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:785: -1- AC_LIBSOURCE([strtoumax.c])
-m4trace:configure.ac:786: -1- AH_OUTPUT([HAVE_DPRINTF], [/* Define to 1 if you have the `dprintf\' function. */
+m4trace:configure.in:764: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRTOUMAX])
+m4trace:configure.in:764: -1- m4_pattern_allow([^HAVE_STRTOUMAX$])
+m4trace:configure.in:764: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strtoumax.$ac_objext"])
+m4trace:configure.in:764: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:764: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:764: -1- AC_LIBSOURCE([strtoumax.c])
+m4trace:configure.in:765: -1- AH_OUTPUT([HAVE_DPRINTF], [/* Define to 1 if you have the `dprintf\' function. */
 @%:@undef HAVE_DPRINTF])
-m4trace:configure.ac:786: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DPRINTF])
-m4trace:configure.ac:786: -1- m4_pattern_allow([^HAVE_DPRINTF$])
-m4trace:configure.ac:786: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS dprintf.$ac_objext"])
-m4trace:configure.ac:786: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:786: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:786: -1- AC_LIBSOURCE([dprintf.c])
-m4trace:configure.ac:787: -1- AH_OUTPUT([HAVE_STRCHRNUL], [/* Define to 1 if you have the `strchrnul\' function. */
+m4trace:configure.in:765: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DPRINTF])
+m4trace:configure.in:765: -1- m4_pattern_allow([^HAVE_DPRINTF$])
+m4trace:configure.in:765: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS dprintf.$ac_objext"])
+m4trace:configure.in:765: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:765: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:765: -1- AC_LIBSOURCE([dprintf.c])
+m4trace:configure.in:766: -1- AH_OUTPUT([HAVE_STRCHRNUL], [/* Define to 1 if you have the `strchrnul\' function. */
 @%:@undef HAVE_STRCHRNUL])
-m4trace:configure.ac:787: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCHRNUL])
-m4trace:configure.ac:787: -1- m4_pattern_allow([^HAVE_STRCHRNUL$])
-m4trace:configure.ac:787: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strchrnul.$ac_objext"])
-m4trace:configure.ac:787: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:787: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:787: -1- AC_LIBSOURCE([strchrnul.c])
-m4trace:configure.ac:788: -1- AH_OUTPUT([HAVE_STRDUP], [/* Define to 1 if you have the `strdup\' function. */
-@%:@undef HAVE_STRDUP])
-m4trace:configure.ac:788: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRDUP])
-m4trace:configure.ac:788: -1- m4_pattern_allow([^HAVE_STRDUP$])
-m4trace:configure.ac:788: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strdup.$ac_objext"])
-m4trace:configure.ac:788: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:788: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:788: -1- AC_LIBSOURCE([strdup.c])
-m4trace:configure.ac:790: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_AUDIT_USER_TTY])
-m4trace:configure.ac:790: -1- m4_pattern_allow([^HAVE_DECL_AUDIT_USER_TTY$])
-m4trace:configure.ac:790: -1- AH_OUTPUT([HAVE_DECL_AUDIT_USER_TTY], [/* Define to 1 if you have the declaration of `AUDIT_USER_TTY\', and to 0 if
+m4trace:configure.in:766: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRCHRNUL])
+m4trace:configure.in:766: -1- m4_pattern_allow([^HAVE_STRCHRNUL$])
+m4trace:configure.in:766: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS strchrnul.$ac_objext"])
+m4trace:configure.in:766: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:766: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:766: -1- AC_LIBSOURCE([strchrnul.c])
+m4trace:configure.in:768: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_AUDIT_USER_TTY])
+m4trace:configure.in:768: -1- m4_pattern_allow([^HAVE_DECL_AUDIT_USER_TTY$])
+m4trace:configure.in:768: -1- AH_OUTPUT([HAVE_DECL_AUDIT_USER_TTY], [/* Define to 1 if you have the declaration of `AUDIT_USER_TTY\', and to 0 if
    you don\'t. */
 @%:@undef HAVE_DECL_AUDIT_USER_TTY])
-m4trace:configure.ac:792: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_CONFSTR])
-m4trace:configure.ac:792: -1- m4_pattern_allow([^HAVE_DECL_CONFSTR$])
-m4trace:configure.ac:792: -1- AH_OUTPUT([HAVE_DECL_CONFSTR], [/* Define to 1 if you have the declaration of `confstr\', and to 0 if you
+m4trace:configure.in:770: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_CONFSTR])
+m4trace:configure.in:770: -1- m4_pattern_allow([^HAVE_DECL_CONFSTR$])
+m4trace:configure.in:770: -1- AH_OUTPUT([HAVE_DECL_CONFSTR], [/* Define to 1 if you have the declaration of `confstr\', and to 0 if you
    don\'t. */
 @%:@undef HAVE_DECL_CONFSTR])
-m4trace:configure.ac:793: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_PRINTF])
-m4trace:configure.ac:793: -1- m4_pattern_allow([^HAVE_DECL_PRINTF$])
-m4trace:configure.ac:793: -1- AH_OUTPUT([HAVE_DECL_PRINTF], [/* Define to 1 if you have the declaration of `printf\', and to 0 if you don\'t.
+m4trace:configure.in:771: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_PRINTF])
+m4trace:configure.in:771: -1- m4_pattern_allow([^HAVE_DECL_PRINTF$])
+m4trace:configure.in:771: -1- AH_OUTPUT([HAVE_DECL_PRINTF], [/* Define to 1 if you have the declaration of `printf\', and to 0 if you don\'t.
    */
 @%:@undef HAVE_DECL_PRINTF])
-m4trace:configure.ac:794: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_SBRK])
-m4trace:configure.ac:794: -1- m4_pattern_allow([^HAVE_DECL_SBRK$])
-m4trace:configure.ac:794: -1- AH_OUTPUT([HAVE_DECL_SBRK], [/* Define to 1 if you have the declaration of `sbrk\', and to 0 if you don\'t.
+m4trace:configure.in:772: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_SBRK])
+m4trace:configure.in:772: -1- m4_pattern_allow([^HAVE_DECL_SBRK$])
+m4trace:configure.in:772: -1- AH_OUTPUT([HAVE_DECL_SBRK], [/* Define to 1 if you have the declaration of `sbrk\', and to 0 if you don\'t.
    */
 @%:@undef HAVE_DECL_SBRK])
-m4trace:configure.ac:795: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_SETREGID])
-m4trace:configure.ac:795: -1- m4_pattern_allow([^HAVE_DECL_SETREGID$])
-m4trace:configure.ac:795: -1- AH_OUTPUT([HAVE_DECL_SETREGID], [/* Define to 1 if you have the declaration of `setregid\', and to 0 if you
+m4trace:configure.in:773: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_SETREGID])
+m4trace:configure.in:773: -1- m4_pattern_allow([^HAVE_DECL_SETREGID$])
+m4trace:configure.in:773: -1- AH_OUTPUT([HAVE_DECL_SETREGID], [/* Define to 1 if you have the declaration of `setregid\', and to 0 if you
    don\'t. */
 @%:@undef HAVE_DECL_SETREGID])
-m4trace:configure.ac:796: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_STRCPY])
-m4trace:configure.ac:796: -1- m4_pattern_allow([^HAVE_DECL_STRCPY$])
-m4trace:configure.ac:796: -1- AH_OUTPUT([HAVE_DECL_STRCPY], [/* Define to 1 if you have the declaration of `strcpy\', and to 0 if you don\'t.
+m4trace:configure.in:774: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_STRCPY])
+m4trace:configure.in:774: -1- m4_pattern_allow([^HAVE_DECL_STRCPY$])
+m4trace:configure.in:774: -1- AH_OUTPUT([HAVE_DECL_STRCPY], [/* Define to 1 if you have the declaration of `strcpy\', and to 0 if you don\'t.
    */
 @%:@undef HAVE_DECL_STRCPY])
-m4trace:configure.ac:797: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_STRSIGNAL])
-m4trace:configure.ac:797: -1- m4_pattern_allow([^HAVE_DECL_STRSIGNAL$])
-m4trace:configure.ac:797: -1- AH_OUTPUT([HAVE_DECL_STRSIGNAL], [/* Define to 1 if you have the declaration of `strsignal\', and to 0 if you
+m4trace:configure.in:775: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_STRSIGNAL])
+m4trace:configure.in:775: -1- m4_pattern_allow([^HAVE_DECL_STRSIGNAL$])
+m4trace:configure.in:775: -1- AH_OUTPUT([HAVE_DECL_STRSIGNAL], [/* Define to 1 if you have the declaration of `strsignal\', and to 0 if you
    don\'t. */
 @%:@undef HAVE_DECL_STRSIGNAL])
-m4trace:configure.ac:800: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_STRTOLD])
-m4trace:configure.ac:800: -1- m4_pattern_allow([^HAVE_DECL_STRTOLD$])
-m4trace:configure.ac:800: -1- AH_OUTPUT([HAVE_DECL_STRTOLD], [/* Define to 1 if you have the declaration of `strtold\', and to 0 if you
+m4trace:configure.in:778: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_STRTOLD])
+m4trace:configure.in:778: -1- m4_pattern_allow([^HAVE_DECL_STRTOLD$])
+m4trace:configure.in:778: -1- AH_OUTPUT([HAVE_DECL_STRTOLD], [/* Define to 1 if you have the declaration of `strtold\', and to 0 if you
    don\'t. */
 @%:@undef HAVE_DECL_STRTOLD])
-m4trace:configure.ac:800: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2880: AC_CHECK_DECLS is expanded from...
-configure.ac:800: the top level])
-m4trace:configure.ac:800: -1- AC_DEFINE_TRACE_LITERAL([STRTOLD_BROKEN])
-m4trace:configure.ac:800: -1- m4_pattern_allow([^STRTOLD_BROKEN$])
-m4trace:configure.ac:816: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:778: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2881: AC_CHECK_DECLS is expanded from...
+configure.in:778: the top level])
+m4trace:configure.in:778: -1- AC_DEFINE_TRACE_LITERAL([STRTOLD_BROKEN])
+m4trace:configure.in:778: -1- m4_pattern_allow([^STRTOLD_BROKEN$])
+m4trace:configure.in:794: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:103: BASH_CHECK_DECL is expanded from...
-configure.ac:816: the top level])
-m4trace:configure.ac:817: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:794: the top level])
+m4trace:configure.in:795: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:103: BASH_CHECK_DECL is expanded from...
-configure.ac:817: the top level])
-m4trace:configure.ac:818: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:795: the top level])
+m4trace:configure.in:796: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:103: BASH_CHECK_DECL is expanded from...
-configure.ac:818: the top level])
-m4trace:configure.ac:819: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:796: the top level])
+m4trace:configure.in:797: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:103: BASH_CHECK_DECL is expanded from...
-configure.ac:819: the top level])
-m4trace:configure.ac:820: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:797: the top level])
+m4trace:configure.in:798: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:103: BASH_CHECK_DECL is expanded from...
-configure.ac:820: the top level])
-m4trace:configure.ac:821: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:798: the top level])
+m4trace:configure.in:799: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:103: BASH_CHECK_DECL is expanded from...
-configure.ac:821: the top level])
-m4trace:configure.ac:823: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
+configure.in:799: the top level])
+m4trace:configure.in:801: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
 @%:@undef HAVE_SYS_TIME_H])
-m4trace:configure.ac:823: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+m4trace:configure.in:801: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
 @%:@undef HAVE_UNISTD_H])
-m4trace:configure.ac:823: -1- AH_OUTPUT([HAVE_ALARM], [/* Define to 1 if you have the `alarm\' function. */
+m4trace:configure.in:801: -1- AH_OUTPUT([HAVE_ALARM], [/* Define to 1 if you have the `alarm\' function. */
 @%:@undef HAVE_ALARM])
-m4trace:configure.ac:823: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS mktime.$ac_objext"])
-m4trace:configure.ac:823: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:823: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:823: -1- AC_LIBSOURCE([mktime.c])
-m4trace:configure.ac:830: -1- AH_OUTPUT([HAVE_ARGZ_H], [/* Define to 1 if you have the <argz.h> header file. */
+m4trace:configure.in:801: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS mktime.$ac_objext"])
+m4trace:configure.in:801: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:801: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:801: -1- AC_LIBSOURCE([mktime.c])
+m4trace:configure.in:808: -1- AH_OUTPUT([HAVE_ARGZ_H], [/* Define to 1 if you have the <argz.h> header file. */
 @%:@undef HAVE_ARGZ_H])
-m4trace:configure.ac:830: -1- AH_OUTPUT([HAVE_ERRNO_H], [/* Define to 1 if you have the <errno.h> header file. */
+m4trace:configure.in:808: -1- AH_OUTPUT([HAVE_ERRNO_H], [/* Define to 1 if you have the <errno.h> header file. */
 @%:@undef HAVE_ERRNO_H])
-m4trace:configure.ac:830: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the <fcntl.h> header file. */
+m4trace:configure.in:808: -1- AH_OUTPUT([HAVE_FCNTL_H], [/* Define to 1 if you have the <fcntl.h> header file. */
 @%:@undef HAVE_FCNTL_H])
-m4trace:configure.ac:830: -1- AH_OUTPUT([HAVE_MALLOC_H], [/* Define to 1 if you have the <malloc.h> header file. */
+m4trace:configure.in:808: -1- AH_OUTPUT([HAVE_MALLOC_H], [/* Define to 1 if you have the <malloc.h> header file. */
 @%:@undef HAVE_MALLOC_H])
-m4trace:configure.ac:830: -1- AH_OUTPUT([HAVE_STDIO_EXT_H], [/* Define to 1 if you have the <stdio_ext.h> header file. */
+m4trace:configure.in:808: -1- AH_OUTPUT([HAVE_STDIO_EXT_H], [/* Define to 1 if you have the <stdio_ext.h> header file. */
 @%:@undef HAVE_STDIO_EXT_H])
-m4trace:configure.ac:833: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
+m4trace:configure.in:811: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the <stdlib.h> header file. */
 @%:@undef HAVE_STDLIB_H])
-m4trace:configure.ac:833: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
+m4trace:configure.in:811: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the <unistd.h> header file. */
 @%:@undef HAVE_UNISTD_H])
-m4trace:configure.ac:833: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
+m4trace:configure.in:811: -1- AH_OUTPUT([HAVE_SYS_PARAM_H], [/* Define to 1 if you have the <sys/param.h> header file. */
 @%:@undef HAVE_SYS_PARAM_H])
-m4trace:configure.ac:833: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
+m4trace:configure.in:811: -1- AH_OUTPUT([HAVE_GETPAGESIZE], [/* Define to 1 if you have the `getpagesize\' function. */
 @%:@undef HAVE_GETPAGESIZE])
-m4trace:configure.ac:833: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPAGESIZE])
-m4trace:configure.ac:833: -1- m4_pattern_allow([^HAVE_GETPAGESIZE$])
-m4trace:configure.ac:833: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MMAP])
-m4trace:configure.ac:833: -1- m4_pattern_allow([^HAVE_MMAP$])
-m4trace:configure.ac:833: -1- AH_OUTPUT([HAVE_MMAP], [/* Define to 1 if you have a working `mmap\' system call. */
+m4trace:configure.in:811: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPAGESIZE])
+m4trace:configure.in:811: -1- m4_pattern_allow([^HAVE_GETPAGESIZE$])
+m4trace:configure.in:811: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MMAP])
+m4trace:configure.in:811: -1- m4_pattern_allow([^HAVE_MMAP$])
+m4trace:configure.in:811: -1- AH_OUTPUT([HAVE_MMAP], [/* Define to 1 if you have a working `mmap\' system call. */
 @%:@undef HAVE_MMAP])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE___ARGZ_COUNT], [/* Define to 1 if you have the `__argz_count\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE___ARGZ_COUNT], [/* Define to 1 if you have the `__argz_count\' function. */
 @%:@undef HAVE___ARGZ_COUNT])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE___ARGZ_NEXT], [/* Define to 1 if you have the `__argz_next\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE___ARGZ_NEXT], [/* Define to 1 if you have the `__argz_next\' function. */
 @%:@undef HAVE___ARGZ_NEXT])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE___ARGZ_STRINGIFY], [/* Define to 1 if you have the `__argz_stringify\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE___ARGZ_STRINGIFY], [/* Define to 1 if you have the `__argz_stringify\' function. */
 @%:@undef HAVE___ARGZ_STRINGIFY])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE_DCGETTEXT], [/* Define to 1 if you have the `dcgettext\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE_DCGETTEXT], [/* Define to 1 if you have the `dcgettext\' function. */
 @%:@undef HAVE_DCGETTEXT])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE_MEMPCPY], [/* Define to 1 if you have the `mempcpy\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE_MEMPCPY], [/* Define to 1 if you have the `mempcpy\' function. */
 @%:@undef HAVE_MEMPCPY])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE_MUNMAP], [/* Define to 1 if you have the `munmap\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE_MUNMAP], [/* Define to 1 if you have the `munmap\' function. */
 @%:@undef HAVE_MUNMAP])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE_STPCPY], [/* Define to 1 if you have the `stpcpy\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE_STPCPY], [/* Define to 1 if you have the `stpcpy\' function. */
 @%:@undef HAVE_STPCPY])
-m4trace:configure.ac:834: -1- AH_OUTPUT([HAVE_STRCSPN], [/* Define to 1 if you have the `strcspn\' function. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE_STRCSPN], [/* Define to 1 if you have the `strcspn\' function. */
 @%:@undef HAVE_STRCSPN])
-m4trace:configure.ac:843: -1- AC_SUBST([INTL_DEP])
-m4trace:configure.ac:843: -1- AC_SUBST_TRACE([INTL_DEP])
-m4trace:configure.ac:843: -1- m4_pattern_allow([^INTL_DEP$])
-m4trace:configure.ac:844: -1- AC_SUBST([INTL_INC])
-m4trace:configure.ac:844: -1- AC_SUBST_TRACE([INTL_INC])
-m4trace:configure.ac:844: -1- m4_pattern_allow([^INTL_INC$])
-m4trace:configure.ac:845: -1- AC_SUBST([LIBINTL_H])
-m4trace:configure.ac:845: -1- AC_SUBST_TRACE([LIBINTL_H])
-m4trace:configure.ac:845: -1- m4_pattern_allow([^LIBINTL_H$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_WCTYPE_H], [/* Define to 1 if you have the <wctype.h> header file. */
+m4trace:configure.in:812: -1- AH_OUTPUT([HAVE_STRDUP], [/* Define to 1 if you have the `strdup\' function. */
+@%:@undef HAVE_STRDUP])
+m4trace:configure.in:821: -1- AC_SUBST([INTL_DEP])
+m4trace:configure.in:821: -1- AC_SUBST_TRACE([INTL_DEP])
+m4trace:configure.in:821: -1- m4_pattern_allow([^INTL_DEP$])
+m4trace:configure.in:822: -1- AC_SUBST([INTL_INC])
+m4trace:configure.in:822: -1- AC_SUBST_TRACE([INTL_INC])
+m4trace:configure.in:822: -1- m4_pattern_allow([^INTL_INC$])
+m4trace:configure.in:823: -1- AC_SUBST([LIBINTL_H])
+m4trace:configure.in:823: -1- AC_SUBST_TRACE([LIBINTL_H])
+m4trace:configure.in:823: -1- m4_pattern_allow([^LIBINTL_H$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_WCTYPE_H], [/* Define to 1 if you have the <wctype.h> header file. */
 @%:@undef HAVE_WCTYPE_H])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCTYPE_H])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_WCTYPE_H$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_WCHAR_H], [/* Define to 1 if you have the <wchar.h> header file. */
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCTYPE_H])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_WCTYPE_H$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_WCHAR_H], [/* Define to 1 if you have the <wchar.h> header file. */
 @%:@undef HAVE_WCHAR_H])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCHAR_H])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_WCHAR_H$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_LANGINFO_H], [/* Define to 1 if you have the <langinfo.h> header file. */
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCHAR_H])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_WCHAR_H$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_LANGINFO_H], [/* Define to 1 if you have the <langinfo.h> header file. */
 @%:@undef HAVE_LANGINFO_H])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LANGINFO_H])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_LANGINFO_H$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBRLEN])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_MBRLEN$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSCMP])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_MBSCMP$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSCMP])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_MBSCMP$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSNRTOWCS])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_MBSNRTOWCS$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSRTOWCS])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_MBSRTOWCS$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_MBSCHR], [/* Define to 1 if you have the `mbschr\' function. */
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LANGINFO_H])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_LANGINFO_H$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBRLEN])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_MBRLEN$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSCMP])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_MBSCMP$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSCMP])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_MBSCMP$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSNRTOWCS])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_MBSNRTOWCS$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_MBSRTOWCS])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_MBSRTOWCS$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_MBSCHR], [/* Define to 1 if you have the `mbschr\' function. */
 @%:@undef HAVE_MBSCHR])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MBSCHR])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_MBSCHR$])
-m4trace:configure.ac:851: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS mbschr.$ac_objext"])
-m4trace:configure.ac:851: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:851: -1- AC_LIBSOURCE([mbschr.c])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCRTOMB])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_WCRTOMB$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCSCOLL])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_WCSCOLL$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCSDUP])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_WCSDUP$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCWIDTH])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_WCWIDTH$])
-m4trace:configure.ac:851: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCTYPE])
-m4trace:configure.ac:851: -2- m4_pattern_allow([^HAVE_WCTYPE$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_WCSWIDTH], [/* Define to 1 if you have the `wcswidth\' function. */
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MBSCHR])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_MBSCHR$])
+m4trace:configure.in:829: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS mbschr.$ac_objext"])
+m4trace:configure.in:829: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:829: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:829: -1- AC_LIBSOURCE([mbschr.c])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCRTOMB])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_WCRTOMB$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCSCOLL])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_WCSCOLL$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCSDUP])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_WCSDUP$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCWIDTH])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_WCWIDTH$])
+m4trace:configure.in:829: -2- AC_DEFINE_TRACE_LITERAL([HAVE_WCTYPE])
+m4trace:configure.in:829: -2- m4_pattern_allow([^HAVE_WCTYPE$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_WCSWIDTH], [/* Define to 1 if you have the `wcswidth\' function. */
 @%:@undef HAVE_WCSWIDTH])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCSWIDTH])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_WCSWIDTH$])
-m4trace:configure.ac:851: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS wcswidth.$ac_objext"])
-m4trace:configure.ac:851: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:851: -1- AC_LIBSOURCE([wcswidth.c])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MBRTOWC])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_MBRTOWC$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_MBRTOWC], [/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCSWIDTH])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_WCSWIDTH$])
+m4trace:configure.in:829: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS wcswidth.$ac_objext"])
+m4trace:configure.in:829: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:829: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:829: -1- AC_LIBSOURCE([wcswidth.c])
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MBRTOWC])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_MBRTOWC$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_MBRTOWC], [/* Define to 1 if mbrtowc and mbstate_t are properly declared. */
 @%:@undef HAVE_MBRTOWC])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MBSTATE_T])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_MBSTATE_T$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_ISWLOWER], [/* Define to 1 if you have the `iswlower\' function. */
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_MBSTATE_T])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_MBSTATE_T$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_ISWLOWER], [/* Define to 1 if you have the `iswlower\' function. */
 @%:@undef HAVE_ISWLOWER])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_ISWUPPER], [/* Define to 1 if you have the `iswupper\' function. */
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_ISWUPPER], [/* Define to 1 if you have the `iswupper\' function. */
 @%:@undef HAVE_ISWUPPER])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_TOWLOWER], [/* Define to 1 if you have the `towlower\' function. */
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_TOWLOWER], [/* Define to 1 if you have the `towlower\' function. */
 @%:@undef HAVE_TOWLOWER])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_TOWUPPER], [/* Define to 1 if you have the `towupper\' function. */
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_TOWUPPER], [/* Define to 1 if you have the `towupper\' function. */
 @%:@undef HAVE_TOWUPPER])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_ISWCTYPE], [/* Define to 1 if you have the `iswctype\' function. */
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_ISWCTYPE], [/* Define to 1 if you have the `iswctype\' function. */
 @%:@undef HAVE_ISWCTYPE])
-m4trace:configure.ac:851: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:829: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:1689: BASH_CHECK_MULTIBYTE is expanded from...
-configure.ac:851: the top level])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LANGINFO_CODESET])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_LANGINFO_CODESET$])
-m4trace:configure.ac:851: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:829: the top level])
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LANGINFO_CODESET])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_LANGINFO_CODESET$])
+m4trace:configure.in:829: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:1689: BASH_CHECK_MULTIBYTE is expanded from...
-configure.ac:851: the top level])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCHAR_T])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_WCHAR_T$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_WCHAR_T], [/* systems should define this type here */
+configure.in:829: the top level])
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCHAR_T])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_WCHAR_T$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_WCHAR_T], [/* systems should define this type here */
 @%:@undef HAVE_WCHAR_T])
-m4trace:configure.ac:851: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:829: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:1689: BASH_CHECK_MULTIBYTE is expanded from...
-configure.ac:851: the top level])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCTYPE_T])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_WCTYPE_T$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_WCTYPE_T], [/* systems should define this type here */
+configure.in:829: the top level])
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WCTYPE_T])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_WCTYPE_T$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_WCTYPE_T], [/* systems should define this type here */
 @%:@undef HAVE_WCTYPE_T])
-m4trace:configure.ac:851: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:829: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:1689: BASH_CHECK_MULTIBYTE is expanded from...
-configure.ac:851: the top level])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WINT_T])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_WINT_T$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_WINT_T], [/* systems should define this type here */
+configure.in:829: the top level])
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_WINT_T])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_WINT_T$])
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_WINT_T], [/* systems should define this type here */
 @%:@undef HAVE_WINT_T])
-m4trace:configure.ac:851: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:829: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
+aclocal.m4:1689: BASH_CHECK_MULTIBYTE is expanded from...
+configure.in:829: the top level])
+m4trace:configure.in:829: -1- _m4_warn([cross], [AC_RUN_IFELSE called without default to allow cross compiling], [../../lib/autoconf/general.m4:2749: AC_RUN_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:1689: BASH_CHECK_MULTIBYTE is expanded from...
-configure.ac:851: the top level])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([WCWIDTH_BROKEN])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^WCWIDTH_BROKEN$])
-m4trace:configure.ac:851: -1- AH_OUTPUT([WCWIDTH_BROKEN], [/* wcwidth is usually not broken */
+configure.in:829: the top level])
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([WCWIDTH_BROKEN])
+m4trace:configure.in:829: -1- m4_pattern_allow([^WCWIDTH_BROKEN$])
+m4trace:configure.in:829: -1- AH_OUTPUT([WCWIDTH_BROKEN], [/* wcwidth is usually not broken */
 @%:@undef WCWIDTH_BROKEN])
-m4trace:configure.ac:851: -1- AH_OUTPUT([HAVE_LOCALE_CHARSET], [/* Define to 1 if you have the `locale_charset\' function. */
+m4trace:configure.in:829: -1- AH_OUTPUT([HAVE_LOCALE_CHARSET], [/* Define to 1 if you have the `locale_charset\' function. */
 @%:@undef HAVE_LOCALE_CHARSET])
-m4trace:configure.ac:851: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCALE_CHARSET])
-m4trace:configure.ac:851: -1- m4_pattern_allow([^HAVE_LOCALE_CHARSET$])
-m4trace:configure.ac:855: -1- AH_OUTPUT([HAVE_LIBDL], [/* Define to 1 if you have the `dl\' library (-ldl). */
+m4trace:configure.in:829: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LOCALE_CHARSET])
+m4trace:configure.in:829: -1- m4_pattern_allow([^HAVE_LOCALE_CHARSET$])
+m4trace:configure.in:833: -1- AH_OUTPUT([HAVE_LIBDL], [/* Define to 1 if you have the `dl\' library (-ldl). */
 @%:@undef HAVE_LIBDL])
-m4trace:configure.ac:855: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL])
-m4trace:configure.ac:855: -1- m4_pattern_allow([^HAVE_LIBDL$])
-m4trace:configure.ac:856: -1- AH_OUTPUT([HAVE_DLOPEN], [/* Define to 1 if you have the `dlopen\' function. */
+m4trace:configure.in:833: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBDL])
+m4trace:configure.in:833: -1- m4_pattern_allow([^HAVE_LIBDL$])
+m4trace:configure.in:834: -1- AH_OUTPUT([HAVE_DLOPEN], [/* Define to 1 if you have the `dlopen\' function. */
 @%:@undef HAVE_DLOPEN])
-m4trace:configure.ac:856: -1- AH_OUTPUT([HAVE_DLCLOSE], [/* Define to 1 if you have the `dlclose\' function. */
+m4trace:configure.in:834: -1- AH_OUTPUT([HAVE_DLCLOSE], [/* Define to 1 if you have the `dlclose\' function. */
 @%:@undef HAVE_DLCLOSE])
-m4trace:configure.ac:856: -1- AH_OUTPUT([HAVE_DLSYM], [/* Define to 1 if you have the `dlsym\' function. */
+m4trace:configure.in:834: -1- AH_OUTPUT([HAVE_DLSYM], [/* Define to 1 if you have the `dlsym\' function. */
 @%:@undef HAVE_DLSYM])
-m4trace:configure.ac:860: -1- _m4_warn([obsolete], [The macro `AC_DECL_SYS_SIGLIST' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/specific.m4:39: AC_DECL_SYS_SIGLIST is expanded from...
-configure.ac:860: the top level])
-m4trace:configure.ac:860: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_SYS_SIGLIST])
-m4trace:configure.ac:860: -1- m4_pattern_allow([^HAVE_DECL_SYS_SIGLIST$])
-m4trace:configure.ac:860: -1- AH_OUTPUT([HAVE_DECL_SYS_SIGLIST], [/* Define to 1 if you have the declaration of `sys_siglist\', and to 0 if you
+m4trace:configure.in:838: -1- _m4_warn([obsolete], [The macro `AC_DECL_SYS_SIGLIST' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/specific.m4:41: AC_DECL_SYS_SIGLIST is expanded from...
+configure.in:838: the top level])
+m4trace:configure.in:838: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_SYS_SIGLIST])
+m4trace:configure.in:838: -1- m4_pattern_allow([^HAVE_DECL_SYS_SIGLIST$])
+m4trace:configure.in:838: -1- AH_OUTPUT([HAVE_DECL_SYS_SIGLIST], [/* Define to 1 if you have the declaration of `sys_siglist\', and to 0 if you
    don\'t. */
 @%:@undef HAVE_DECL_SYS_SIGLIST])
-m4trace:configure.ac:864: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:842: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:563: BASH_FUNC_INET_ATON is expanded from...
-configure.ac:864: the top level])
-m4trace:configure.ac:864: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INET_ATON])
-m4trace:configure.ac:864: -1- m4_pattern_allow([^HAVE_INET_ATON$])
-m4trace:configure.ac:864: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS inet_aton.$ac_objext"])
-m4trace:configure.ac:864: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:864: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:864: -1- AC_LIBSOURCE([inet_aton.c])
-m4trace:configure.ac:870: -1- AH_OUTPUT([HAVE_LIBSUN], [/* Define to 1 if you have the `sun\' library (-lsun). */
+configure.in:842: the top level])
+m4trace:configure.in:842: -1- AC_DEFINE_TRACE_LITERAL([HAVE_INET_ATON])
+m4trace:configure.in:842: -1- m4_pattern_allow([^HAVE_INET_ATON$])
+m4trace:configure.in:842: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS inet_aton.$ac_objext"])
+m4trace:configure.in:842: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:842: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:842: -1- AC_LIBSOURCE([inet_aton.c])
+m4trace:configure.in:848: -1- AH_OUTPUT([HAVE_LIBSUN], [/* Define to 1 if you have the `sun\' library (-lsun). */
 @%:@undef HAVE_LIBSUN])
-m4trace:configure.ac:870: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSUN])
-m4trace:configure.ac:870: -1- m4_pattern_allow([^HAVE_LIBSUN$])
-m4trace:configure.ac:875: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSOCKET])
-m4trace:configure.ac:875: -1- m4_pattern_allow([^HAVE_LIBSOCKET$])
-m4trace:configure.ac:875: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPEERNAME])
-m4trace:configure.ac:875: -1- m4_pattern_allow([^HAVE_GETPEERNAME$])
-m4trace:configure.ac:879: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+m4trace:configure.in:848: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSUN])
+m4trace:configure.in:848: -1- m4_pattern_allow([^HAVE_LIBSUN$])
+m4trace:configure.in:853: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LIBSOCKET])
+m4trace:configure.in:853: -1- m4_pattern_allow([^HAVE_LIBSOCKET$])
+m4trace:configure.in:853: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPEERNAME])
+m4trace:configure.in:853: -1- m4_pattern_allow([^HAVE_GETPEERNAME$])
+m4trace:configure.in:857: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:732: BASH_FUNC_GETHOSTBYNAME is expanded from...
-configure.ac:879: the top level])
-m4trace:configure.ac:879: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETHOSTBYNAME])
-m4trace:configure.ac:879: -1- m4_pattern_allow([^HAVE_GETHOSTBYNAME$])
-m4trace:configure.ac:883: -1- AC_DEFINE_TRACE_LITERAL([uid_t])
-m4trace:configure.ac:883: -1- m4_pattern_allow([^uid_t$])
-m4trace:configure.ac:883: -1- AH_OUTPUT([uid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
+configure.in:857: the top level])
+m4trace:configure.in:857: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETHOSTBYNAME])
+m4trace:configure.in:857: -1- m4_pattern_allow([^HAVE_GETHOSTBYNAME$])
+m4trace:configure.in:861: -1- AC_DEFINE_TRACE_LITERAL([uid_t])
+m4trace:configure.in:861: -1- m4_pattern_allow([^uid_t$])
+m4trace:configure.in:861: -1- AH_OUTPUT([uid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
 @%:@undef uid_t])
-m4trace:configure.ac:883: -1- AC_DEFINE_TRACE_LITERAL([gid_t])
-m4trace:configure.ac:883: -1- m4_pattern_allow([^gid_t$])
-m4trace:configure.ac:883: -1- AH_OUTPUT([gid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
+m4trace:configure.in:861: -1- AC_DEFINE_TRACE_LITERAL([gid_t])
+m4trace:configure.in:861: -1- m4_pattern_allow([^gid_t$])
+m4trace:configure.in:861: -1- AH_OUTPUT([gid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
 @%:@undef gid_t])
-m4trace:configure.ac:883: -1- AC_DEFINE_TRACE_LITERAL([GETGROUPS_T])
-m4trace:configure.ac:883: -1- m4_pattern_allow([^GETGROUPS_T$])
-m4trace:configure.ac:883: -1- AH_OUTPUT([GETGROUPS_T], [/* Define to the type of elements in the array set by `getgroups\'. Usually
+m4trace:configure.in:861: -1- AC_DEFINE_TRACE_LITERAL([GETGROUPS_T])
+m4trace:configure.in:861: -1- m4_pattern_allow([^GETGROUPS_T$])
+m4trace:configure.in:861: -1- AH_OUTPUT([GETGROUPS_T], [/* Define to the type of elements in the array set by `getgroups\'. Usually
    this is either `int\' or `gid_t\'. */
 @%:@undef GETGROUPS_T])
-m4trace:configure.ac:884: -1- AC_DEFINE_TRACE_LITERAL([off_t])
-m4trace:configure.ac:884: -1- m4_pattern_allow([^off_t$])
-m4trace:configure.ac:884: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if <sys/types.h> does not define. */
+m4trace:configure.in:862: -1- AC_DEFINE_TRACE_LITERAL([off_t])
+m4trace:configure.in:862: -1- m4_pattern_allow([^off_t$])
+m4trace:configure.in:862: -1- AH_OUTPUT([off_t], [/* Define to `long int\' if <sys/types.h> does not define. */
 @%:@undef off_t])
-m4trace:configure.ac:885: -1- AC_DEFINE_TRACE_LITERAL([mode_t])
-m4trace:configure.ac:885: -1- m4_pattern_allow([^mode_t$])
-m4trace:configure.ac:885: -1- AH_OUTPUT([mode_t], [/* Define to `int\' if <sys/types.h> does not define. */
+m4trace:configure.in:863: -1- AC_DEFINE_TRACE_LITERAL([mode_t])
+m4trace:configure.in:863: -1- m4_pattern_allow([^mode_t$])
+m4trace:configure.in:863: -1- AH_OUTPUT([mode_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef mode_t])
-m4trace:configure.ac:886: -1- AC_DEFINE_TRACE_LITERAL([uid_t])
-m4trace:configure.ac:886: -1- m4_pattern_allow([^uid_t$])
-m4trace:configure.ac:886: -1- AH_OUTPUT([uid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
+m4trace:configure.in:864: -1- AC_DEFINE_TRACE_LITERAL([uid_t])
+m4trace:configure.in:864: -1- m4_pattern_allow([^uid_t$])
+m4trace:configure.in:864: -1- AH_OUTPUT([uid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
 @%:@undef uid_t])
-m4trace:configure.ac:886: -1- AC_DEFINE_TRACE_LITERAL([gid_t])
-m4trace:configure.ac:886: -1- m4_pattern_allow([^gid_t$])
-m4trace:configure.ac:886: -1- AH_OUTPUT([gid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
+m4trace:configure.in:864: -1- AC_DEFINE_TRACE_LITERAL([gid_t])
+m4trace:configure.in:864: -1- m4_pattern_allow([^gid_t$])
+m4trace:configure.in:864: -1- AH_OUTPUT([gid_t], [/* Define to `int\' if <sys/types.h> doesn\'t define. */
 @%:@undef gid_t])
-m4trace:configure.ac:887: -1- AC_DEFINE_TRACE_LITERAL([pid_t])
-m4trace:configure.ac:887: -1- m4_pattern_allow([^pid_t$])
-m4trace:configure.ac:887: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if <sys/types.h> does not define. */
+m4trace:configure.in:865: -1- AC_DEFINE_TRACE_LITERAL([pid_t])
+m4trace:configure.in:865: -1- m4_pattern_allow([^pid_t$])
+m4trace:configure.in:865: -1- AH_OUTPUT([pid_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef pid_t])
-m4trace:configure.ac:888: -1- AC_DEFINE_TRACE_LITERAL([size_t])
-m4trace:configure.ac:888: -1- m4_pattern_allow([^size_t$])
-m4trace:configure.ac:888: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
+m4trace:configure.in:866: -1- AC_DEFINE_TRACE_LITERAL([size_t])
+m4trace:configure.in:866: -1- m4_pattern_allow([^size_t$])
+m4trace:configure.in:866: -1- AH_OUTPUT([size_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
 @%:@undef size_t])
-m4trace:configure.ac:889: -1- AC_DEFINE_TRACE_LITERAL([ssize_t])
-m4trace:configure.ac:889: -1- m4_pattern_allow([^ssize_t$])
-m4trace:configure.ac:889: -1- AH_OUTPUT([ssize_t], [/* Define to `int\' if <sys/types.h> does not define. */
+m4trace:configure.in:867: -1- AC_DEFINE_TRACE_LITERAL([ssize_t])
+m4trace:configure.in:867: -1- m4_pattern_allow([^ssize_t$])
+m4trace:configure.in:867: -1- AH_OUTPUT([ssize_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef ssize_t])
-m4trace:configure.ac:890: -1- AC_DEFINE_TRACE_LITERAL([time_t])
-m4trace:configure.ac:890: -1- m4_pattern_allow([^time_t$])
-m4trace:configure.ac:890: -1- AH_OUTPUT([time_t], [/* Define to `long\' if <sys/types.h> does not define. */
+m4trace:configure.in:868: -1- AC_DEFINE_TRACE_LITERAL([time_t])
+m4trace:configure.in:868: -1- m4_pattern_allow([^time_t$])
+m4trace:configure.in:868: -1- AH_OUTPUT([time_t], [/* Define to `long\' if <sys/types.h> does not define. */
 @%:@undef time_t])
-m4trace:configure.ac:892: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:870: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:472: BASH_TYPE_LONG_LONG is expanded from...
-configure.ac:892: the top level])
-m4trace:configure.ac:892: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_LONG])
-m4trace:configure.ac:892: -1- m4_pattern_allow([^HAVE_LONG_LONG$])
-m4trace:configure.ac:893: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:870: the top level])
+m4trace:configure.in:870: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LONG_LONG])
+m4trace:configure.in:870: -1- m4_pattern_allow([^HAVE_LONG_LONG$])
+m4trace:configure.in:871: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:486: BASH_TYPE_UNSIGNED_LONG_LONG is expanded from...
-configure.ac:893: the top level])
-m4trace:configure.ac:893: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UNSIGNED_LONG_LONG])
-m4trace:configure.ac:893: -1- m4_pattern_allow([^HAVE_UNSIGNED_LONG_LONG$])
-m4trace:configure.ac:895: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/types.m4:746: AC_TYPE_SIGNAL is expanded from...
-configure.ac:895: the top level])
-m4trace:configure.ac:895: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])
-m4trace:configure.ac:895: -1- m4_pattern_allow([^RETSIGTYPE$])
-m4trace:configure.ac:895: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */
+configure.in:871: the top level])
+m4trace:configure.in:871: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UNSIGNED_LONG_LONG])
+m4trace:configure.in:871: -1- m4_pattern_allow([^HAVE_UNSIGNED_LONG_LONG$])
+m4trace:configure.in:873: -1- _m4_warn([obsolete], [The macro `AC_TYPE_SIGNAL' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/types.m4:738: AC_TYPE_SIGNAL is expanded from...
+configure.in:873: the top level])
+m4trace:configure.in:873: -1- AC_DEFINE_TRACE_LITERAL([RETSIGTYPE])
+m4trace:configure.in:873: -1- m4_pattern_allow([^RETSIGTYPE$])
+m4trace:configure.in:873: -1- AH_OUTPUT([RETSIGTYPE], [/* Define as the return type of signal handlers (`int\' or `void\'). */
 @%:@undef RETSIGTYPE])
-m4trace:configure.ac:896: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:874: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:537: BASH_TYPE_SIG_ATOMIC_T is expanded from...
-configure.ac:896: the top level])
-m4trace:configure.ac:896: -1- AC_DEFINE_TRACE_LITERAL([sig_atomic_t])
-m4trace:configure.ac:896: -1- m4_pattern_allow([^sig_atomic_t$])
-m4trace:configure.ac:896: -1- AH_OUTPUT([sig_atomic_t], [/* Define to `int\' if <sys/types.h> does not define. */
+configure.in:874: the top level])
+m4trace:configure.in:874: -1- AC_DEFINE_TRACE_LITERAL([sig_atomic_t])
+m4trace:configure.in:874: -1- m4_pattern_allow([^sig_atomic_t$])
+m4trace:configure.in:874: -1- AH_OUTPUT([sig_atomic_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef sig_atomic_t])
-m4trace:configure.ac:898: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_CHAR])
-m4trace:configure.ac:898: -1- m4_pattern_allow([^SIZEOF_CHAR$])
-m4trace:configure.ac:898: -1- AH_OUTPUT([SIZEOF_CHAR], [/* The size of `char\', as computed by sizeof. */
+m4trace:configure.in:876: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_CHAR])
+m4trace:configure.in:876: -1- m4_pattern_allow([^SIZEOF_CHAR$])
+m4trace:configure.in:876: -1- AH_OUTPUT([SIZEOF_CHAR], [/* The size of `char\', as computed by sizeof. */
 @%:@undef SIZEOF_CHAR])
-m4trace:configure.ac:899: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_SHORT])
-m4trace:configure.ac:899: -1- m4_pattern_allow([^SIZEOF_SHORT$])
-m4trace:configure.ac:899: -1- AH_OUTPUT([SIZEOF_SHORT], [/* The size of `short\', as computed by sizeof. */
+m4trace:configure.in:877: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_SHORT])
+m4trace:configure.in:877: -1- m4_pattern_allow([^SIZEOF_SHORT$])
+m4trace:configure.in:877: -1- AH_OUTPUT([SIZEOF_SHORT], [/* The size of `short\', as computed by sizeof. */
 @%:@undef SIZEOF_SHORT])
-m4trace:configure.ac:900: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_INT])
-m4trace:configure.ac:900: -1- m4_pattern_allow([^SIZEOF_INT$])
-m4trace:configure.ac:900: -1- AH_OUTPUT([SIZEOF_INT], [/* The size of `int\', as computed by sizeof. */
+m4trace:configure.in:878: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_INT])
+m4trace:configure.in:878: -1- m4_pattern_allow([^SIZEOF_INT$])
+m4trace:configure.in:878: -1- AH_OUTPUT([SIZEOF_INT], [/* The size of `int\', as computed by sizeof. */
 @%:@undef SIZEOF_INT])
-m4trace:configure.ac:901: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_LONG])
-m4trace:configure.ac:901: -1- m4_pattern_allow([^SIZEOF_LONG$])
-m4trace:configure.ac:901: -1- AH_OUTPUT([SIZEOF_LONG], [/* The size of `long\', as computed by sizeof. */
+m4trace:configure.in:879: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_LONG])
+m4trace:configure.in:879: -1- m4_pattern_allow([^SIZEOF_LONG$])
+m4trace:configure.in:879: -1- AH_OUTPUT([SIZEOF_LONG], [/* The size of `long\', as computed by sizeof. */
 @%:@undef SIZEOF_LONG])
-m4trace:configure.ac:902: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_CHAR_P])
-m4trace:configure.ac:902: -1- m4_pattern_allow([^SIZEOF_CHAR_P$])
-m4trace:configure.ac:902: -1- AH_OUTPUT([SIZEOF_CHAR_P], [/* The size of `char *\', as computed by sizeof. */
+m4trace:configure.in:880: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_CHAR_P])
+m4trace:configure.in:880: -1- m4_pattern_allow([^SIZEOF_CHAR_P$])
+m4trace:configure.in:880: -1- AH_OUTPUT([SIZEOF_CHAR_P], [/* The size of `char *\', as computed by sizeof. */
 @%:@undef SIZEOF_CHAR_P])
-m4trace:configure.ac:903: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_DOUBLE])
-m4trace:configure.ac:903: -1- m4_pattern_allow([^SIZEOF_DOUBLE$])
-m4trace:configure.ac:903: -1- AH_OUTPUT([SIZEOF_DOUBLE], [/* The size of `double\', as computed by sizeof. */
+m4trace:configure.in:881: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_DOUBLE])
+m4trace:configure.in:881: -1- m4_pattern_allow([^SIZEOF_DOUBLE$])
+m4trace:configure.in:881: -1- AH_OUTPUT([SIZEOF_DOUBLE], [/* The size of `double\', as computed by sizeof. */
 @%:@undef SIZEOF_DOUBLE])
-m4trace:configure.ac:904: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_LONG_LONG])
-m4trace:configure.ac:904: -1- m4_pattern_allow([^SIZEOF_LONG_LONG$])
-m4trace:configure.ac:904: -1- AH_OUTPUT([SIZEOF_LONG_LONG], [/* The size of `long long\', as computed by sizeof. */
+m4trace:configure.in:882: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_LONG_LONG])
+m4trace:configure.in:882: -1- m4_pattern_allow([^SIZEOF_LONG_LONG$])
+m4trace:configure.in:882: -1- AH_OUTPUT([SIZEOF_LONG_LONG], [/* The size of `long long\', as computed by sizeof. */
 @%:@undef SIZEOF_LONG_LONG])
-m4trace:configure.ac:906: -1- AC_DEFINE_TRACE_LITERAL([u_int])
-m4trace:configure.ac:906: -1- m4_pattern_allow([^u_int$])
-m4trace:configure.ac:906: -1- AH_OUTPUT([u_int], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
+m4trace:configure.in:884: -1- AC_DEFINE_TRACE_LITERAL([u_int])
+m4trace:configure.in:884: -1- m4_pattern_allow([^u_int$])
+m4trace:configure.in:884: -1- AH_OUTPUT([u_int], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
 @%:@undef u_int])
-m4trace:configure.ac:907: -1- AC_DEFINE_TRACE_LITERAL([u_long])
-m4trace:configure.ac:907: -1- m4_pattern_allow([^u_long$])
-m4trace:configure.ac:907: -1- AH_OUTPUT([u_long], [/* Define to `unsigned long\' if <sys/types.h> does not define. */
+m4trace:configure.in:885: -1- AC_DEFINE_TRACE_LITERAL([u_long])
+m4trace:configure.in:885: -1- m4_pattern_allow([^u_long$])
+m4trace:configure.in:885: -1- AH_OUTPUT([u_long], [/* Define to `unsigned long\' if <sys/types.h> does not define. */
 @%:@undef u_long])
-m4trace:configure.ac:909: -1- AC_DEFINE_TRACE_LITERAL([bits16_t])
-m4trace:configure.ac:909: -1- m4_pattern_allow([^bits16_t$])
-m4trace:configure.ac:909: -1- AH_OUTPUT([bits16_t], [/* Define to `short\' if <sys/types.h> does not define. */
+m4trace:configure.in:887: -1- AC_DEFINE_TRACE_LITERAL([bits16_t])
+m4trace:configure.in:887: -1- m4_pattern_allow([^bits16_t$])
+m4trace:configure.in:887: -1- AH_OUTPUT([bits16_t], [/* Define to `short\' if <sys/types.h> does not define. */
 @%:@undef bits16_t])
-m4trace:configure.ac:909: -1- AC_DEFINE_TRACE_LITERAL([bits16_t])
-m4trace:configure.ac:909: -1- m4_pattern_allow([^bits16_t$])
-m4trace:configure.ac:909: -1- AH_OUTPUT([bits16_t], [/* Define to `char\' if <sys/types.h> does not define. */
+m4trace:configure.in:887: -1- AC_DEFINE_TRACE_LITERAL([bits16_t])
+m4trace:configure.in:887: -1- m4_pattern_allow([^bits16_t$])
+m4trace:configure.in:887: -1- AH_OUTPUT([bits16_t], [/* Define to `char\' if <sys/types.h> does not define. */
 @%:@undef bits16_t])
-m4trace:configure.ac:909: -1- AC_DEFINE_TRACE_LITERAL([bits16_t])
-m4trace:configure.ac:909: -1- m4_pattern_allow([^bits16_t$])
-m4trace:configure.ac:909: -1- AH_OUTPUT([bits16_t], [/* Define to `short\' if <sys/types.h> does not define. */
+m4trace:configure.in:887: -1- AC_DEFINE_TRACE_LITERAL([bits16_t])
+m4trace:configure.in:887: -1- m4_pattern_allow([^bits16_t$])
+m4trace:configure.in:887: -1- AH_OUTPUT([bits16_t], [/* Define to `short\' if <sys/types.h> does not define. */
 @%:@undef bits16_t])
-m4trace:configure.ac:910: -1- AC_DEFINE_TRACE_LITERAL([u_bits16_t])
-m4trace:configure.ac:910: -1- m4_pattern_allow([^u_bits16_t$])
-m4trace:configure.ac:910: -1- AH_OUTPUT([u_bits16_t], [/* Define to `unsigned short\' if <sys/types.h> does not define. */
+m4trace:configure.in:888: -1- AC_DEFINE_TRACE_LITERAL([u_bits16_t])
+m4trace:configure.in:888: -1- m4_pattern_allow([^u_bits16_t$])
+m4trace:configure.in:888: -1- AH_OUTPUT([u_bits16_t], [/* Define to `unsigned short\' if <sys/types.h> does not define. */
 @%:@undef u_bits16_t])
-m4trace:configure.ac:910: -1- AC_DEFINE_TRACE_LITERAL([u_bits16_t])
-m4trace:configure.ac:910: -1- m4_pattern_allow([^u_bits16_t$])
-m4trace:configure.ac:910: -1- AH_OUTPUT([u_bits16_t], [/* Define to `unsigned char\' if <sys/types.h> does not define. */
+m4trace:configure.in:888: -1- AC_DEFINE_TRACE_LITERAL([u_bits16_t])
+m4trace:configure.in:888: -1- m4_pattern_allow([^u_bits16_t$])
+m4trace:configure.in:888: -1- AH_OUTPUT([u_bits16_t], [/* Define to `unsigned char\' if <sys/types.h> does not define. */
 @%:@undef u_bits16_t])
-m4trace:configure.ac:910: -1- AC_DEFINE_TRACE_LITERAL([u_bits16_t])
-m4trace:configure.ac:910: -1- m4_pattern_allow([^u_bits16_t$])
-m4trace:configure.ac:910: -1- AH_OUTPUT([u_bits16_t], [/* Define to `unsigned short\' if <sys/types.h> does not define. */
+m4trace:configure.in:888: -1- AC_DEFINE_TRACE_LITERAL([u_bits16_t])
+m4trace:configure.in:888: -1- m4_pattern_allow([^u_bits16_t$])
+m4trace:configure.in:888: -1- AH_OUTPUT([u_bits16_t], [/* Define to `unsigned short\' if <sys/types.h> does not define. */
 @%:@undef u_bits16_t])
-m4trace:configure.ac:911: -1- AC_DEFINE_TRACE_LITERAL([bits32_t])
-m4trace:configure.ac:911: -1- m4_pattern_allow([^bits32_t$])
-m4trace:configure.ac:911: -1- AH_OUTPUT([bits32_t], [/* Define to `int\' if <sys/types.h> does not define. */
+m4trace:configure.in:889: -1- AC_DEFINE_TRACE_LITERAL([bits32_t])
+m4trace:configure.in:889: -1- m4_pattern_allow([^bits32_t$])
+m4trace:configure.in:889: -1- AH_OUTPUT([bits32_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef bits32_t])
-m4trace:configure.ac:911: -1- AC_DEFINE_TRACE_LITERAL([bits32_t])
-m4trace:configure.ac:911: -1- m4_pattern_allow([^bits32_t$])
-m4trace:configure.ac:911: -1- AH_OUTPUT([bits32_t], [/* Define to `long\' if <sys/types.h> does not define. */
+m4trace:configure.in:889: -1- AC_DEFINE_TRACE_LITERAL([bits32_t])
+m4trace:configure.in:889: -1- m4_pattern_allow([^bits32_t$])
+m4trace:configure.in:889: -1- AH_OUTPUT([bits32_t], [/* Define to `long\' if <sys/types.h> does not define. */
 @%:@undef bits32_t])
-m4trace:configure.ac:911: -1- AC_DEFINE_TRACE_LITERAL([bits32_t])
-m4trace:configure.ac:911: -1- m4_pattern_allow([^bits32_t$])
-m4trace:configure.ac:911: -1- AH_OUTPUT([bits32_t], [/* Define to `int\' if <sys/types.h> does not define. */
+m4trace:configure.in:889: -1- AC_DEFINE_TRACE_LITERAL([bits32_t])
+m4trace:configure.in:889: -1- m4_pattern_allow([^bits32_t$])
+m4trace:configure.in:889: -1- AH_OUTPUT([bits32_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef bits32_t])
-m4trace:configure.ac:912: -1- AC_DEFINE_TRACE_LITERAL([u_bits32_t])
-m4trace:configure.ac:912: -1- m4_pattern_allow([^u_bits32_t$])
-m4trace:configure.ac:912: -1- AH_OUTPUT([u_bits32_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
+m4trace:configure.in:890: -1- AC_DEFINE_TRACE_LITERAL([u_bits32_t])
+m4trace:configure.in:890: -1- m4_pattern_allow([^u_bits32_t$])
+m4trace:configure.in:890: -1- AH_OUTPUT([u_bits32_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
 @%:@undef u_bits32_t])
-m4trace:configure.ac:912: -1- AC_DEFINE_TRACE_LITERAL([u_bits32_t])
-m4trace:configure.ac:912: -1- m4_pattern_allow([^u_bits32_t$])
-m4trace:configure.ac:912: -1- AH_OUTPUT([u_bits32_t], [/* Define to `unsigned long\' if <sys/types.h> does not define. */
+m4trace:configure.in:890: -1- AC_DEFINE_TRACE_LITERAL([u_bits32_t])
+m4trace:configure.in:890: -1- m4_pattern_allow([^u_bits32_t$])
+m4trace:configure.in:890: -1- AH_OUTPUT([u_bits32_t], [/* Define to `unsigned long\' if <sys/types.h> does not define. */
 @%:@undef u_bits32_t])
-m4trace:configure.ac:912: -1- AC_DEFINE_TRACE_LITERAL([u_bits32_t])
-m4trace:configure.ac:912: -1- m4_pattern_allow([^u_bits32_t$])
-m4trace:configure.ac:912: -1- AH_OUTPUT([u_bits32_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
+m4trace:configure.in:890: -1- AC_DEFINE_TRACE_LITERAL([u_bits32_t])
+m4trace:configure.in:890: -1- m4_pattern_allow([^u_bits32_t$])
+m4trace:configure.in:890: -1- AH_OUTPUT([u_bits32_t], [/* Define to `unsigned int\' if <sys/types.h> does not define. */
 @%:@undef u_bits32_t])
-m4trace:configure.ac:913: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
-m4trace:configure.ac:913: -1- m4_pattern_allow([^bits64_t$])
-m4trace:configure.ac:913: -1- AH_OUTPUT([bits64_t], [/* Define to `char *\' if <sys/types.h> does not define. */
+m4trace:configure.in:891: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
+m4trace:configure.in:891: -1- m4_pattern_allow([^bits64_t$])
+m4trace:configure.in:891: -1- AH_OUTPUT([bits64_t], [/* Define to `char *\' if <sys/types.h> does not define. */
 @%:@undef bits64_t])
-m4trace:configure.ac:913: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
-m4trace:configure.ac:913: -1- m4_pattern_allow([^bits64_t$])
-m4trace:configure.ac:913: -1- AH_OUTPUT([bits64_t], [/* Define to `double\' if <sys/types.h> does not define. */
+m4trace:configure.in:891: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
+m4trace:configure.in:891: -1- m4_pattern_allow([^bits64_t$])
+m4trace:configure.in:891: -1- AH_OUTPUT([bits64_t], [/* Define to `double\' if <sys/types.h> does not define. */
 @%:@undef bits64_t])
-m4trace:configure.ac:913: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
-m4trace:configure.ac:913: -1- m4_pattern_allow([^bits64_t$])
-m4trace:configure.ac:913: -1- AH_OUTPUT([bits64_t], [/* Define to `long long\' if <sys/types.h> does not define. */
+m4trace:configure.in:891: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
+m4trace:configure.in:891: -1- m4_pattern_allow([^bits64_t$])
+m4trace:configure.in:891: -1- AH_OUTPUT([bits64_t], [/* Define to `long long\' if <sys/types.h> does not define. */
 @%:@undef bits64_t])
-m4trace:configure.ac:913: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
-m4trace:configure.ac:913: -1- m4_pattern_allow([^bits64_t$])
-m4trace:configure.ac:913: -1- AH_OUTPUT([bits64_t], [/* Define to `long\' if <sys/types.h> does not define. */
+m4trace:configure.in:891: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
+m4trace:configure.in:891: -1- m4_pattern_allow([^bits64_t$])
+m4trace:configure.in:891: -1- AH_OUTPUT([bits64_t], [/* Define to `long\' if <sys/types.h> does not define. */
 @%:@undef bits64_t])
-m4trace:configure.ac:913: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
-m4trace:configure.ac:913: -1- m4_pattern_allow([^bits64_t$])
-m4trace:configure.ac:913: -1- AH_OUTPUT([bits64_t], [/* Define to `double\' if <sys/types.h> does not define. */
+m4trace:configure.in:891: -1- AC_DEFINE_TRACE_LITERAL([bits64_t])
+m4trace:configure.in:891: -1- m4_pattern_allow([^bits64_t$])
+m4trace:configure.in:891: -1- AH_OUTPUT([bits64_t], [/* Define to `double\' if <sys/types.h> does not define. */
 @%:@undef bits64_t])
-m4trace:configure.ac:915: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
-m4trace:configure.ac:915: -1- m4_pattern_allow([^ptrdiff_t$])
-m4trace:configure.ac:915: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `int\' if <sys/types.h> does not define. */
+m4trace:configure.in:893: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
+m4trace:configure.in:893: -1- m4_pattern_allow([^ptrdiff_t$])
+m4trace:configure.in:893: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef ptrdiff_t])
-m4trace:configure.ac:915: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
-m4trace:configure.ac:915: -1- m4_pattern_allow([^ptrdiff_t$])
-m4trace:configure.ac:915: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `long\' if <sys/types.h> does not define. */
+m4trace:configure.in:893: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
+m4trace:configure.in:893: -1- m4_pattern_allow([^ptrdiff_t$])
+m4trace:configure.in:893: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `long\' if <sys/types.h> does not define. */
 @%:@undef ptrdiff_t])
-m4trace:configure.ac:915: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
-m4trace:configure.ac:915: -1- m4_pattern_allow([^ptrdiff_t$])
-m4trace:configure.ac:915: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `long long\' if <sys/types.h> does not define. */
+m4trace:configure.in:893: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
+m4trace:configure.in:893: -1- m4_pattern_allow([^ptrdiff_t$])
+m4trace:configure.in:893: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `long long\' if <sys/types.h> does not define. */
 @%:@undef ptrdiff_t])
-m4trace:configure.ac:915: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
-m4trace:configure.ac:915: -1- m4_pattern_allow([^ptrdiff_t$])
-m4trace:configure.ac:915: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `int\' if <sys/types.h> does not define. */
+m4trace:configure.in:893: -1- AC_DEFINE_TRACE_LITERAL([ptrdiff_t])
+m4trace:configure.in:893: -1- m4_pattern_allow([^ptrdiff_t$])
+m4trace:configure.in:893: -1- AH_OUTPUT([ptrdiff_t], [/* Define to `int\' if <sys/types.h> does not define. */
 @%:@undef ptrdiff_t])
-m4trace:configure.ac:918: -1- AC_DEFINE_TRACE_LITERAL([STAT_MACROS_BROKEN])
-m4trace:configure.ac:918: -1- m4_pattern_allow([^STAT_MACROS_BROKEN$])
-m4trace:configure.ac:918: -1- AH_OUTPUT([STAT_MACROS_BROKEN], [/* Define to 1 if the `S_IS*\' macros in <sys/stat.h> do not work properly. */
+m4trace:configure.in:896: -1- AC_DEFINE_TRACE_LITERAL([STAT_MACROS_BROKEN])
+m4trace:configure.in:896: -1- m4_pattern_allow([^STAT_MACROS_BROKEN$])
+m4trace:configure.in:896: -1- AH_OUTPUT([STAT_MACROS_BROKEN], [/* Define to 1 if the `S_IS*\' macros in <sys/stat.h> do not work properly. */
 @%:@undef STAT_MACROS_BROKEN])
-m4trace:configure.ac:923: -1- AC_DEFINE_TRACE_LITERAL([HAVE_HASH_BANG_EXEC])
-m4trace:configure.ac:923: -1- m4_pattern_allow([^HAVE_HASH_BANG_EXEC$])
-m4trace:configure.ac:928: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:901: -1- AC_DEFINE_TRACE_LITERAL([HAVE_HASH_BANG_EXEC])
+m4trace:configure.in:901: -1- m4_pattern_allow([^HAVE_HASH_BANG_EXEC$])
+m4trace:configure.in:906: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:549: BASH_FUNC_LSTAT is expanded from...
-configure.ac:928: the top level])
-m4trace:configure.ac:928: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LSTAT])
-m4trace:configure.ac:928: -1- m4_pattern_allow([^HAVE_LSTAT$])
-m4trace:configure.ac:932: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:906: the top level])
+m4trace:configure.in:906: -1- AC_DEFINE_TRACE_LITERAL([HAVE_LSTAT])
+m4trace:configure.in:906: -1- m4_pattern_allow([^HAVE_LSTAT$])
+m4trace:configure.in:910: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1920: BASH_FUNC_CTYPE_NONASCII is expanded from...
-configure.ac:932: the top level])
-m4trace:configure.ac:932: -1- AC_DEFINE_TRACE_LITERAL([CTYPE_NON_ASCII])
-m4trace:configure.ac:932: -1- m4_pattern_allow([^CTYPE_NON_ASCII$])
-m4trace:configure.ac:933: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:910: the top level])
+m4trace:configure.in:910: -1- AC_DEFINE_TRACE_LITERAL([CTYPE_NON_ASCII])
+m4trace:configure.in:910: -1- m4_pattern_allow([^CTYPE_NON_ASCII$])
+m4trace:configure.in:911: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:270: BASH_FUNC_DUP2_CLOEXEC_CHECK is expanded from...
-configure.ac:933: the top level])
-m4trace:configure.ac:933: -1- AC_DEFINE_TRACE_LITERAL([DUP2_BROKEN])
-m4trace:configure.ac:933: -1- m4_pattern_allow([^DUP2_BROKEN$])
-m4trace:configure.ac:934: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:911: the top level])
+m4trace:configure.in:911: -1- AC_DEFINE_TRACE_LITERAL([DUP2_BROKEN])
+m4trace:configure.in:911: -1- m4_pattern_allow([^DUP2_BROKEN$])
+m4trace:configure.in:912: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1235: BASH_SYS_PGRP_SYNC is expanded from...
-configure.ac:934: the top level])
-m4trace:configure.ac:934: -1- AC_DEFINE_TRACE_LITERAL([PGRP_PIPE])
-m4trace:configure.ac:934: -1- m4_pattern_allow([^PGRP_PIPE$])
-m4trace:configure.ac:935: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:912: the top level])
+m4trace:configure.in:912: -1- AC_DEFINE_TRACE_LITERAL([PGRP_PIPE])
+m4trace:configure.in:912: -1- m4_pattern_allow([^PGRP_PIPE$])
+m4trace:configure.in:913: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1195: BASH_SYS_SIGNAL_VINTAGE is expanded from...
-configure.ac:935: the top level])
-m4trace:configure.ac:935: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:913: the top level])
+m4trace:configure.in:913: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2662: _AC_LINK_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2679: AC_LINK_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1195: BASH_SYS_SIGNAL_VINTAGE is expanded from...
-configure.ac:935: the top level])
-m4trace:configure.ac:935: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2661: _AC_LINK_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2678: AC_LINK_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:913: the top level])
+m4trace:configure.in:913: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2662: _AC_LINK_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2679: AC_LINK_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2662: _AC_LINK_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2679: AC_LINK_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1195: BASH_SYS_SIGNAL_VINTAGE is expanded from...
-configure.ac:935: the top level])
-m4trace:configure.ac:935: -1- AC_DEFINE_TRACE_LITERAL([HAVE_POSIX_SIGNALS])
-m4trace:configure.ac:935: -1- m4_pattern_allow([^HAVE_POSIX_SIGNALS$])
-m4trace:configure.ac:935: -1- AC_DEFINE_TRACE_LITERAL([HAVE_BSD_SIGNALS])
-m4trace:configure.ac:935: -1- m4_pattern_allow([^HAVE_BSD_SIGNALS$])
-m4trace:configure.ac:935: -1- AC_DEFINE_TRACE_LITERAL([HAVE_USG_SIGHOLD])
-m4trace:configure.ac:935: -1- m4_pattern_allow([^HAVE_USG_SIGHOLD$])
-m4trace:configure.ac:938: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:913: the top level])
+m4trace:configure.in:913: -1- AC_DEFINE_TRACE_LITERAL([HAVE_POSIX_SIGNALS])
+m4trace:configure.in:913: -1- m4_pattern_allow([^HAVE_POSIX_SIGNALS$])
+m4trace:configure.in:913: -1- AC_DEFINE_TRACE_LITERAL([HAVE_BSD_SIGNALS])
+m4trace:configure.in:913: -1- m4_pattern_allow([^HAVE_BSD_SIGNALS$])
+m4trace:configure.in:913: -1- AC_DEFINE_TRACE_LITERAL([HAVE_USG_SIGHOLD])
+m4trace:configure.in:913: -1- m4_pattern_allow([^HAVE_USG_SIGHOLD$])
+m4trace:configure.in:916: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:253: BASH_SYS_ERRLIST is expanded from...
-configure.ac:938: the top level])
-m4trace:configure.ac:938: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_ERRLIST])
-m4trace:configure.ac:938: -1- m4_pattern_allow([^HAVE_SYS_ERRLIST$])
-m4trace:configure.ac:939: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:916: the top level])
+m4trace:configure.in:916: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_ERRLIST])
+m4trace:configure.in:916: -1- m4_pattern_allow([^HAVE_SYS_ERRLIST$])
+m4trace:configure.in:917: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:211: BASH_SYS_SIGLIST is expanded from...
-configure.ac:939: the top level])
-m4trace:configure.ac:939: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_SIGLIST])
-m4trace:configure.ac:939: -1- m4_pattern_allow([^HAVE_SYS_SIGLIST$])
-m4trace:configure.ac:940: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:917: the top level])
+m4trace:configure.in:917: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SYS_SIGLIST])
+m4trace:configure.in:917: -1- m4_pattern_allow([^HAVE_SYS_SIGLIST$])
+m4trace:configure.in:918: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:167: BASH_DECL_UNDER_SYS_SIGLIST is expanded from...
 aclocal.m4:184: BASH_UNDER_SYS_SIGLIST is expanded from...
-configure.ac:940: the top level])
-m4trace:configure.ac:940: -1- AC_DEFINE_TRACE_LITERAL([UNDER_SYS_SIGLIST_DECLARED])
-m4trace:configure.ac:940: -1- m4_pattern_allow([^UNDER_SYS_SIGLIST_DECLARED$])
-m4trace:configure.ac:940: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:918: the top level])
+m4trace:configure.in:918: -1- AC_DEFINE_TRACE_LITERAL([UNDER_SYS_SIGLIST_DECLARED])
+m4trace:configure.in:918: -1- m4_pattern_allow([^UNDER_SYS_SIGLIST_DECLARED$])
+m4trace:configure.in:918: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:184: BASH_UNDER_SYS_SIGLIST is expanded from...
-configure.ac:940: the top level])
-m4trace:configure.ac:940: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UNDER_SYS_SIGLIST])
-m4trace:configure.ac:940: -1- m4_pattern_allow([^HAVE_UNDER_SYS_SIGLIST$])
-m4trace:configure.ac:943: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:918: the top level])
+m4trace:configure.in:918: -1- AC_DEFINE_TRACE_LITERAL([HAVE_UNDER_SYS_SIGLIST])
+m4trace:configure.in:918: -1- m4_pattern_allow([^HAVE_UNDER_SYS_SIGLIST$])
+m4trace:configure.in:921: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:366: BASH_TYPE_SIGHANDLER is expanded from...
-configure.ac:943: the top level])
-m4trace:configure.ac:943: -1- AC_DEFINE_TRACE_LITERAL([VOID_SIGHANDLER])
-m4trace:configure.ac:943: -1- m4_pattern_allow([^VOID_SIGHANDLER$])
-m4trace:configure.ac:944: -1- AC_DEFINE_TRACE_LITERAL([clock_t])
-m4trace:configure.ac:944: -1- m4_pattern_allow([^clock_t$])
-m4trace:configure.ac:945: -1- AC_DEFINE_TRACE_LITERAL([sigset_t])
-m4trace:configure.ac:945: -1- m4_pattern_allow([^sigset_t$])
-m4trace:configure.ac:946: -1- AC_DEFINE_TRACE_LITERAL([sig_atomic_t])
-m4trace:configure.ac:946: -1- m4_pattern_allow([^sig_atomic_t$])
-m4trace:configure.ac:947: -1- AC_DEFINE_TRACE_LITERAL([HAVE_QUAD_T])
-m4trace:configure.ac:947: -1- m4_pattern_allow([^HAVE_QUAD_T$])
-m4trace:configure.ac:947: -1- AC_DEFINE_TRACE_LITERAL([quad_t])
-m4trace:configure.ac:947: -1- m4_pattern_allow([^quad_t$])
-m4trace:configure.ac:948: -1- AC_DEFINE_TRACE_LITERAL([intmax_t])
-m4trace:configure.ac:948: -1- m4_pattern_allow([^intmax_t$])
-m4trace:configure.ac:949: -1- AC_DEFINE_TRACE_LITERAL([uintmax_t])
-m4trace:configure.ac:949: -1- m4_pattern_allow([^uintmax_t$])
-m4trace:configure.ac:951: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SOCKLEN_T])
-m4trace:configure.ac:951: -1- m4_pattern_allow([^HAVE_SOCKLEN_T$])
-m4trace:configure.ac:951: -1- AC_DEFINE_TRACE_LITERAL([socklen_t])
-m4trace:configure.ac:951: -1- m4_pattern_allow([^socklen_t$])
-m4trace:configure.ac:953: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:921: the top level])
+m4trace:configure.in:921: -1- AC_DEFINE_TRACE_LITERAL([VOID_SIGHANDLER])
+m4trace:configure.in:921: -1- m4_pattern_allow([^VOID_SIGHANDLER$])
+m4trace:configure.in:922: -1- AC_DEFINE_TRACE_LITERAL([clock_t])
+m4trace:configure.in:922: -1- m4_pattern_allow([^clock_t$])
+m4trace:configure.in:923: -1- AC_DEFINE_TRACE_LITERAL([sigset_t])
+m4trace:configure.in:923: -1- m4_pattern_allow([^sigset_t$])
+m4trace:configure.in:924: -1- AC_DEFINE_TRACE_LITERAL([HAVE_QUAD_T])
+m4trace:configure.in:924: -1- m4_pattern_allow([^HAVE_QUAD_T$])
+m4trace:configure.in:924: -1- AC_DEFINE_TRACE_LITERAL([quad_t])
+m4trace:configure.in:924: -1- m4_pattern_allow([^quad_t$])
+m4trace:configure.in:925: -1- AC_DEFINE_TRACE_LITERAL([intmax_t])
+m4trace:configure.in:925: -1- m4_pattern_allow([^intmax_t$])
+m4trace:configure.in:926: -1- AC_DEFINE_TRACE_LITERAL([uintmax_t])
+m4trace:configure.in:926: -1- m4_pattern_allow([^uintmax_t$])
+m4trace:configure.in:928: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SOCKLEN_T])
+m4trace:configure.in:928: -1- m4_pattern_allow([^HAVE_SOCKLEN_T$])
+m4trace:configure.in:928: -1- AC_DEFINE_TRACE_LITERAL([socklen_t])
+m4trace:configure.in:928: -1- m4_pattern_allow([^socklen_t$])
+m4trace:configure.in:930: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:507: BASH_TYPE_RLIMIT is expanded from...
-configure.ac:953: the top level])
-m4trace:configure.ac:953: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:930: the top level])
+m4trace:configure.in:930: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:507: BASH_TYPE_RLIMIT is expanded from...
-configure.ac:953: the top level])
-m4trace:configure.ac:953: -1- AC_DEFINE_TRACE_LITERAL([RLIMTYPE])
-m4trace:configure.ac:953: -1- m4_pattern_allow([^RLIMTYPE$])
-m4trace:configure.ac:953: -1- AC_DEFINE_TRACE_LITERAL([RLIMTYPE])
-m4trace:configure.ac:953: -1- m4_pattern_allow([^RLIMTYPE$])
-m4trace:configure.ac:955: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_INTMAX_T])
-m4trace:configure.ac:955: -1- m4_pattern_allow([^SIZEOF_INTMAX_T$])
-m4trace:configure.ac:955: -1- AH_OUTPUT([SIZEOF_INTMAX_T], [/* The size of `intmax_t\', as computed by sizeof. */
+configure.in:930: the top level])
+m4trace:configure.in:930: -1- AC_DEFINE_TRACE_LITERAL([RLIMTYPE])
+m4trace:configure.in:930: -1- m4_pattern_allow([^RLIMTYPE$])
+m4trace:configure.in:930: -1- AC_DEFINE_TRACE_LITERAL([RLIMTYPE])
+m4trace:configure.in:930: -1- m4_pattern_allow([^RLIMTYPE$])
+m4trace:configure.in:932: -1- AC_DEFINE_TRACE_LITERAL([SIZEOF_INTMAX_T])
+m4trace:configure.in:932: -1- m4_pattern_allow([^SIZEOF_INTMAX_T$])
+m4trace:configure.in:932: -1- AH_OUTPUT([SIZEOF_INTMAX_T], [/* The size of `intmax_t\', as computed by sizeof. */
 @%:@undef SIZEOF_INTMAX_T])
-m4trace:configure.ac:958: -2- AC_DEFINE_TRACE_LITERAL([TERMIOS_LDISC])
-m4trace:configure.ac:958: -2- m4_pattern_allow([^TERMIOS_LDISC$])
-m4trace:configure.ac:959: -2- AC_DEFINE_TRACE_LITERAL([TERMIO_LDISC])
-m4trace:configure.ac:959: -2- m4_pattern_allow([^TERMIO_LDISC$])
-m4trace:configure.ac:960: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+m4trace:configure.in:935: -2- AC_DEFINE_TRACE_LITERAL([TERMIOS_LDISC])
+m4trace:configure.in:935: -2- m4_pattern_allow([^TERMIOS_LDISC$])
+m4trace:configure.in:936: -2- AC_DEFINE_TRACE_LITERAL([TERMIO_LDISC])
+m4trace:configure.in:936: -2- m4_pattern_allow([^TERMIO_LDISC$])
+m4trace:configure.in:937: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1042: BASH_STRUCT_DIRENT_D_INO is expanded from...
-configure.ac:960: the top level])
-m4trace:configure.ac:960: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_DIRENT_D_INO])
-m4trace:configure.ac:960: -1- m4_pattern_allow([^HAVE_STRUCT_DIRENT_D_INO$])
-m4trace:configure.ac:961: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:937: the top level])
+m4trace:configure.in:937: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_DIRENT_D_INO])
+m4trace:configure.in:937: -1- m4_pattern_allow([^HAVE_STRUCT_DIRENT_D_INO$])
+m4trace:configure.in:938: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1075: BASH_STRUCT_DIRENT_D_FILENO is expanded from...
-configure.ac:961: the top level])
-m4trace:configure.ac:961: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_DIRENT_D_FILENO])
-m4trace:configure.ac:961: -1- m4_pattern_allow([^HAVE_STRUCT_DIRENT_D_FILENO$])
-m4trace:configure.ac:962: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:938: the top level])
+m4trace:configure.in:938: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_DIRENT_D_FILENO])
+m4trace:configure.in:938: -1- m4_pattern_allow([^HAVE_STRUCT_DIRENT_D_FILENO$])
+m4trace:configure.in:939: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1108: BASH_STRUCT_DIRENT_D_NAMLEN is expanded from...
-configure.ac:962: the top level])
-m4trace:configure.ac:962: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_DIRENT_D_NAMLEN])
-m4trace:configure.ac:962: -1- m4_pattern_allow([^HAVE_STRUCT_DIRENT_D_NAMLEN$])
-m4trace:configure.ac:963: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:939: the top level])
+m4trace:configure.in:939: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_DIRENT_D_NAMLEN])
+m4trace:configure.in:939: -1- m4_pattern_allow([^HAVE_STRUCT_DIRENT_D_NAMLEN$])
+m4trace:configure.in:940: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1173: BASH_STRUCT_WINSIZE is expanded from...
-configure.ac:963: the top level])
-m4trace:configure.ac:963: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:940: the top level])
+m4trace:configure.in:940: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1173: BASH_STRUCT_WINSIZE is expanded from...
-configure.ac:963: the top level])
-m4trace:configure.ac:963: -1- AC_DEFINE_TRACE_LITERAL([STRUCT_WINSIZE_IN_SYS_IOCTL])
-m4trace:configure.ac:963: -1- m4_pattern_allow([^STRUCT_WINSIZE_IN_SYS_IOCTL$])
-m4trace:configure.ac:963: -1- AC_DEFINE_TRACE_LITERAL([STRUCT_WINSIZE_IN_TERMIOS])
-m4trace:configure.ac:963: -1- m4_pattern_allow([^STRUCT_WINSIZE_IN_TERMIOS$])
-m4trace:configure.ac:964: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TIMEVAL])
-m4trace:configure.ac:964: -1- m4_pattern_allow([^HAVE_TIMEVAL$])
-m4trace:configure.ac:965: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_BLOCKS])
-m4trace:configure.ac:965: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_BLOCKS$])
-m4trace:configure.ac:965: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_BLOCKS], [/* Define to 1 if `st_blocks\' is a member of `struct stat\'. */
+configure.in:940: the top level])
+m4trace:configure.in:940: -1- AC_DEFINE_TRACE_LITERAL([STRUCT_WINSIZE_IN_SYS_IOCTL])
+m4trace:configure.in:940: -1- m4_pattern_allow([^STRUCT_WINSIZE_IN_SYS_IOCTL$])
+m4trace:configure.in:940: -1- AC_DEFINE_TRACE_LITERAL([STRUCT_WINSIZE_IN_TERMIOS])
+m4trace:configure.in:940: -1- m4_pattern_allow([^STRUCT_WINSIZE_IN_TERMIOS$])
+m4trace:configure.in:941: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TIMEVAL])
+m4trace:configure.in:941: -1- m4_pattern_allow([^HAVE_TIMEVAL$])
+m4trace:configure.in:942: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_BLOCKS])
+m4trace:configure.in:942: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_BLOCKS$])
+m4trace:configure.in:942: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_BLOCKS], [/* Define to 1 if `st_blocks\' is a member of `struct stat\'. */
 @%:@undef HAVE_STRUCT_STAT_ST_BLOCKS])
-m4trace:configure.ac:966: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME])
-m4trace:configure.ac:966: -1- m4_pattern_allow([^TM_IN_SYS_TIME$])
-m4trace:configure.ac:966: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your <sys/time.h> declares `struct tm\'. */
+m4trace:configure.in:943: -1- AC_DEFINE_TRACE_LITERAL([TM_IN_SYS_TIME])
+m4trace:configure.in:943: -1- m4_pattern_allow([^TM_IN_SYS_TIME$])
+m4trace:configure.in:943: -1- AH_OUTPUT([TM_IN_SYS_TIME], [/* Define to 1 if your <sys/time.h> declares `struct tm\'. */
 @%:@undef TM_IN_SYS_TIME])
-m4trace:configure.ac:967: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TM_TM_ZONE])
-m4trace:configure.ac:967: -1- m4_pattern_allow([^HAVE_STRUCT_TM_TM_ZONE$])
-m4trace:configure.ac:967: -1- AH_OUTPUT([HAVE_STRUCT_TM_TM_ZONE], [/* Define to 1 if `tm_zone\' is a member of `struct tm\'. */
+m4trace:configure.in:944: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TM_TM_ZONE])
+m4trace:configure.in:944: -1- m4_pattern_allow([^HAVE_STRUCT_TM_TM_ZONE$])
+m4trace:configure.in:944: -1- AH_OUTPUT([HAVE_STRUCT_TM_TM_ZONE], [/* Define to 1 if `tm_zone\' is a member of `struct tm\'. */
 @%:@undef HAVE_STRUCT_TM_TM_ZONE])
-m4trace:configure.ac:967: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TM_ZONE])
-m4trace:configure.ac:967: -1- m4_pattern_allow([^HAVE_TM_ZONE$])
-m4trace:configure.ac:967: -1- AH_OUTPUT([HAVE_TM_ZONE], [/* Define to 1 if your `struct tm\' has `tm_zone\'. Deprecated, use
+m4trace:configure.in:944: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TM_ZONE])
+m4trace:configure.in:944: -1- m4_pattern_allow([^HAVE_TM_ZONE$])
+m4trace:configure.in:944: -1- AH_OUTPUT([HAVE_TM_ZONE], [/* Define to 1 if your `struct tm\' has `tm_zone\'. Deprecated, use
    `HAVE_STRUCT_TM_TM_ZONE\' instead. */
 @%:@undef HAVE_TM_ZONE])
-m4trace:configure.ac:967: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_TZNAME])
-m4trace:configure.ac:967: -1- m4_pattern_allow([^HAVE_DECL_TZNAME$])
-m4trace:configure.ac:967: -1- AH_OUTPUT([HAVE_DECL_TZNAME], [/* Define to 1 if you have the declaration of `tzname\', and to 0 if you don\'t.
+m4trace:configure.in:944: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_TZNAME])
+m4trace:configure.in:944: -1- m4_pattern_allow([^HAVE_DECL_TZNAME$])
+m4trace:configure.in:944: -1- AH_OUTPUT([HAVE_DECL_TZNAME], [/* Define to 1 if you have the declaration of `tzname\', and to 0 if you don\'t.
    */
 @%:@undef HAVE_DECL_TZNAME])
-m4trace:configure.ac:967: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TZNAME])
-m4trace:configure.ac:967: -1- m4_pattern_allow([^HAVE_TZNAME$])
-m4trace:configure.ac:967: -1- AH_OUTPUT([HAVE_TZNAME], [/* Define to 1 if you don\'t have `tm_zone\' but do have the external array
+m4trace:configure.in:944: -1- AC_DEFINE_TRACE_LITERAL([HAVE_TZNAME])
+m4trace:configure.in:944: -1- m4_pattern_allow([^HAVE_TZNAME$])
+m4trace:configure.in:944: -1- AH_OUTPUT([HAVE_TZNAME], [/* Define to 1 if you don\'t have `tm_zone\' but do have the external array
    `tzname\'. */
 @%:@undef HAVE_TZNAME])
-m4trace:configure.ac:968: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMEZONE])
-m4trace:configure.ac:968: -1- m4_pattern_allow([^HAVE_STRUCT_TIMEZONE$])
-m4trace:configure.ac:970: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+m4trace:configure.in:945: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMEZONE])
+m4trace:configure.in:945: -1- m4_pattern_allow([^HAVE_STRUCT_TIMEZONE$])
+m4trace:configure.in:947: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:4149: BASH_STRUCT_WEXITSTATUS_OFFSET is expanded from...
-configure.ac:970: the top level])
-m4trace:configure.ac:970: -1- AC_DEFINE_TRACE_LITERAL([WEXITSTATUS_OFFSET])
-m4trace:configure.ac:970: -1- m4_pattern_allow([^WEXITSTATUS_OFFSET$])
-m4trace:configure.ac:970: -1- AH_OUTPUT([WEXITSTATUS_OFFSET], [/* Offset of exit status in wait status word */
+configure.in:947: the top level])
+m4trace:configure.in:947: -1- AC_DEFINE_TRACE_LITERAL([WEXITSTATUS_OFFSET])
+m4trace:configure.in:947: -1- m4_pattern_allow([^WEXITSTATUS_OFFSET$])
+m4trace:configure.in:947: -1- AH_OUTPUT([WEXITSTATUS_OFFSET], [/* Offset of exit status in wait status word */
 @%:@undef WEXITSTATUS_OFFSET])
-m4trace:configure.ac:972: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
+m4trace:configure.in:949: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
 @%:@undef HAVE_SYS_TIME_H])
-m4trace:configure.ac:972: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^HAVE_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_DEFINE_TRACE_LITERAL([TIME_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^TIME_H_DEFINES_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^HAVE_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_DEFINE_TRACE_LITERAL([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^SYS_TIME_H_DEFINES_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^HAVE_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_DEFINE_TRACE_LITERAL([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^PTHREAD_H_DEFINES_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- AC_SUBST_TRACE([TIME_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^TIME_H_DEFINES_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- AC_SUBST_TRACE([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^SYS_TIME_H_DEFINES_STRUCT_TIMESPEC$])
-m4trace:configure.ac:972: -1- AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- AC_SUBST_TRACE([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
-m4trace:configure.ac:972: -1- m4_pattern_allow([^PTHREAD_H_DEFINES_STRUCT_TIMESPEC$])
-m4trace:configure.ac:973: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
+m4trace:configure.in:949: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^HAVE_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_DEFINE_TRACE_LITERAL([TIME_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^TIME_H_DEFINES_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^HAVE_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_DEFINE_TRACE_LITERAL([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^SYS_TIME_H_DEFINES_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^HAVE_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_DEFINE_TRACE_LITERAL([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^PTHREAD_H_DEFINES_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- AC_SUBST_TRACE([TIME_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^TIME_H_DEFINES_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- AC_SUBST_TRACE([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^SYS_TIME_H_DEFINES_STRUCT_TIMESPEC$])
+m4trace:configure.in:949: -1- AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- AC_SUBST_TRACE([PTHREAD_H_DEFINES_STRUCT_TIMESPEC])
+m4trace:configure.in:949: -1- m4_pattern_allow([^PTHREAD_H_DEFINES_STRUCT_TIMESPEC$])
+m4trace:configure.in:950: -1- AH_OUTPUT([HAVE_SYS_TIME_H], [/* Define to 1 if you have the <sys/time.h> header file. */
 @%:@undef HAVE_SYS_TIME_H])
-m4trace:configure.ac:973: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC])
-m4trace:configure.ac:973: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC$])
-m4trace:configure.ac:973: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC], [/* Define to 1 if `st_atim.tv_nsec\' is a member of `struct stat\'. */
+m4trace:configure.in:950: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC])
+m4trace:configure.in:950: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC$])
+m4trace:configure.in:950: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC], [/* Define to 1 if `st_atim.tv_nsec\' is a member of `struct stat\'. */
 @%:@undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC])
-m4trace:configure.ac:973: -1- AC_DEFINE_TRACE_LITERAL([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC])
-m4trace:configure.ac:973: -1- m4_pattern_allow([^TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC$])
-m4trace:configure.ac:973: -1- AH_OUTPUT([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [/* Define to 1 if the type of the st_atim member of a struct stat is struct
+m4trace:configure.in:950: -1- AC_DEFINE_TRACE_LITERAL([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC])
+m4trace:configure.in:950: -1- m4_pattern_allow([^TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC$])
+m4trace:configure.in:950: -1- AH_OUTPUT([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [/* Define to 1 if the type of the st_atim member of a struct stat is struct
    timespec. */
 @%:@undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC])
-m4trace:configure.ac:973: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC])
-m4trace:configure.ac:973: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC$])
-m4trace:configure.ac:973: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC], [/* Define to 1 if `st_atimespec.tv_nsec\' is a member of `struct stat\'. */
+m4trace:configure.in:950: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC])
+m4trace:configure.in:950: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC$])
+m4trace:configure.in:950: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC], [/* Define to 1 if `st_atimespec.tv_nsec\' is a member of `struct stat\'. */
 @%:@undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC])
-m4trace:configure.ac:973: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIMENSEC])
-m4trace:configure.ac:973: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIMENSEC$])
-m4trace:configure.ac:973: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIMENSEC], [/* Define to 1 if `st_atimensec\' is a member of `struct stat\'. */
+m4trace:configure.in:950: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIMENSEC])
+m4trace:configure.in:950: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIMENSEC$])
+m4trace:configure.in:950: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIMENSEC], [/* Define to 1 if `st_atimensec\' is a member of `struct stat\'. */
 @%:@undef HAVE_STRUCT_STAT_ST_ATIMENSEC])
-m4trace:configure.ac:973: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC])
-m4trace:configure.ac:973: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC$])
-m4trace:configure.ac:973: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC], [/* Define to 1 if `st_atim.st__tim.tv_nsec\' is a member of `struct stat\'. */
+m4trace:configure.in:950: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC])
+m4trace:configure.in:950: -1- m4_pattern_allow([^HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC$])
+m4trace:configure.in:950: -1- AH_OUTPUT([HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC], [/* Define to 1 if `st_atim.st__tim.tv_nsec\' is a member of `struct stat\'. */
 @%:@undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC])
-m4trace:configure.ac:976: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+m4trace:configure.in:953: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:299: BASH_FUNC_STRSIGNAL is expanded from...
-configure.ac:976: the top level])
-m4trace:configure.ac:976: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRSIGNAL])
-m4trace:configure.ac:976: -1- m4_pattern_allow([^HAVE_STRSIGNAL$])
-m4trace:configure.ac:977: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:953: the top level])
+m4trace:configure.in:953: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STRSIGNAL])
+m4trace:configure.in:953: -1- m4_pattern_allow([^HAVE_STRSIGNAL$])
+m4trace:configure.in:954: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:313: BASH_FUNC_OPENDIR_CHECK is expanded from...
-configure.ac:977: the top level])
-m4trace:configure.ac:977: -1- AC_DEFINE_TRACE_LITERAL([OPENDIR_NOT_ROBUST])
-m4trace:configure.ac:977: -1- m4_pattern_allow([^OPENDIR_NOT_ROBUST$])
-m4trace:configure.ac:978: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:954: the top level])
+m4trace:configure.in:954: -1- AC_DEFINE_TRACE_LITERAL([OPENDIR_NOT_ROBUST])
+m4trace:configure.in:954: -1- m4_pattern_allow([^OPENDIR_NOT_ROBUST$])
+m4trace:configure.in:955: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:683: BASH_FUNC_ULIMIT_MAXFDS is expanded from...
-configure.ac:978: the top level])
-m4trace:configure.ac:978: -1- AC_DEFINE_TRACE_LITERAL([ULIMIT_MAXFDS])
-m4trace:configure.ac:978: -1- m4_pattern_allow([^ULIMIT_MAXFDS$])
-m4trace:configure.ac:979: -1- AH_OUTPUT([HAVE_FPURGE], [/* Define to 1 if you have the `fpurge\' function. */
+configure.in:955: the top level])
+m4trace:configure.in:955: -1- AC_DEFINE_TRACE_LITERAL([ULIMIT_MAXFDS])
+m4trace:configure.in:955: -1- m4_pattern_allow([^ULIMIT_MAXFDS$])
+m4trace:configure.in:956: -1- AH_OUTPUT([HAVE_FPURGE], [/* Define to 1 if you have the `fpurge\' function. */
 @%:@undef HAVE_FPURGE])
-m4trace:configure.ac:979: -1- AH_OUTPUT([HAVE___FPURGE], [/* Define to 1 if you have the `__fpurge\' function. */
+m4trace:configure.in:956: -1- AH_OUTPUT([HAVE___FPURGE], [/* Define to 1 if you have the `__fpurge\' function. */
 @%:@undef HAVE___FPURGE])
-m4trace:configure.ac:979: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_FPURGE])
-m4trace:configure.ac:979: -1- m4_pattern_allow([^HAVE_DECL_FPURGE$])
-m4trace:configure.ac:979: -1- AH_OUTPUT([HAVE_DECL_FPURGE], [/* Define to 1 if you have the declaration of `fpurge\', and to 0 if you don\'t.
+m4trace:configure.in:956: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DECL_FPURGE])
+m4trace:configure.in:956: -1- m4_pattern_allow([^HAVE_DECL_FPURGE$])
+m4trace:configure.in:956: -1- AH_OUTPUT([HAVE_DECL_FPURGE], [/* Define to 1 if you have the declaration of `fpurge\', and to 0 if you don\'t.
    */
 @%:@undef HAVE_DECL_FPURGE])
-m4trace:configure.ac:980: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+m4trace:configure.in:957: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:579: BASH_FUNC_GETENV is expanded from...
-configure.ac:980: the top level])
-m4trace:configure.ac:980: -1- AC_DEFINE_TRACE_LITERAL([CAN_REDEFINE_GETENV])
-m4trace:configure.ac:980: -1- m4_pattern_allow([^CAN_REDEFINE_GETENV$])
-m4trace:configure.ac:982: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:957: the top level])
+m4trace:configure.in:957: -1- AC_DEFINE_TRACE_LITERAL([CAN_REDEFINE_GETENV])
+m4trace:configure.in:957: -1- m4_pattern_allow([^CAN_REDEFINE_GETENV$])
+m4trace:configure.in:959: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:702: BASH_FUNC_GETCWD is expanded from...
-configure.ac:982: the top level])
-m4trace:configure.ac:982: -1- AC_DEFINE_TRACE_LITERAL([GETCWD_BROKEN])
-m4trace:configure.ac:982: -1- m4_pattern_allow([^GETCWD_BROKEN$])
-m4trace:configure.ac:982: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS getcwd.$ac_objext"])
-m4trace:configure.ac:982: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:982: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:982: -1- AC_LIBSOURCE([getcwd.c])
-m4trace:configure.ac:984: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:959: the top level])
+m4trace:configure.in:959: -1- AC_DEFINE_TRACE_LITERAL([GETCWD_BROKEN])
+m4trace:configure.in:959: -1- m4_pattern_allow([^GETCWD_BROKEN$])
+m4trace:configure.in:959: -1- AC_SUBST([LIB@&t@OBJS], ["$LIB@&t@OBJS getcwd.$ac_objext"])
+m4trace:configure.in:959: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:959: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:959: -1- AC_LIBSOURCE([getcwd.c])
+m4trace:configure.in:961: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:778: BASH_FUNC_POSIX_SETJMP is expanded from...
-configure.ac:984: the top level])
-m4trace:configure.ac:984: -1- AC_DEFINE_TRACE_LITERAL([HAVE_POSIX_SIGSETJMP])
-m4trace:configure.ac:984: -1- m4_pattern_allow([^HAVE_POSIX_SIGSETJMP$])
-m4trace:configure.ac:985: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:961: the top level])
+m4trace:configure.in:961: -1- AC_DEFINE_TRACE_LITERAL([HAVE_POSIX_SIGSETJMP])
+m4trace:configure.in:961: -1- m4_pattern_allow([^HAVE_POSIX_SIGSETJMP$])
+m4trace:configure.in:962: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:829: BASH_FUNC_STRCOLL is expanded from...
-configure.ac:985: the top level])
-m4trace:configure.ac:985: -1- AC_DEFINE_TRACE_LITERAL([STRCOLL_BROKEN])
-m4trace:configure.ac:985: -1- m4_pattern_allow([^STRCOLL_BROKEN$])
-m4trace:configure.ac:986: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define to 1 if you have the `snprintf\' function. */
+configure.in:962: the top level])
+m4trace:configure.in:962: -1- AC_DEFINE_TRACE_LITERAL([STRCOLL_BROKEN])
+m4trace:configure.in:962: -1- m4_pattern_allow([^STRCOLL_BROKEN$])
+m4trace:configure.in:963: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define to 1 if you have the `snprintf\' function. */
 @%:@undef HAVE_SNPRINTF])
-m4trace:configure.ac:986: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:963: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:4065: BASH_FUNC_SNPRINTF is expanded from...
-configure.ac:986: the top level])
-m4trace:configure.ac:986: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SNPRINTF])
-m4trace:configure.ac:986: -1- m4_pattern_allow([^HAVE_SNPRINTF$])
-m4trace:configure.ac:986: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define if you have a standard-conformant snprintf function. */
+configure.in:963: the top level])
+m4trace:configure.in:963: -1- AC_DEFINE_TRACE_LITERAL([HAVE_SNPRINTF])
+m4trace:configure.in:963: -1- m4_pattern_allow([^HAVE_SNPRINTF$])
+m4trace:configure.in:963: -1- AH_OUTPUT([HAVE_SNPRINTF], [/* Define if you have a standard-conformant snprintf function. */
 @%:@undef HAVE_SNPRINTF])
-m4trace:configure.ac:987: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define to 1 if you have the `vsnprintf\' function. */
+m4trace:configure.in:964: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define to 1 if you have the `vsnprintf\' function. */
 @%:@undef HAVE_VSNPRINTF])
-m4trace:configure.ac:987: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:964: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:4093: BASH_FUNC_VSNPRINTF is expanded from...
-configure.ac:987: the top level])
-m4trace:configure.ac:987: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VSNPRINTF])
-m4trace:configure.ac:987: -1- m4_pattern_allow([^HAVE_VSNPRINTF$])
-m4trace:configure.ac:987: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define if you have a standard-conformant vsnprintf function. */
+configure.in:964: the top level])
+m4trace:configure.in:964: -1- AC_DEFINE_TRACE_LITERAL([HAVE_VSNPRINTF])
+m4trace:configure.in:964: -1- m4_pattern_allow([^HAVE_VSNPRINTF$])
+m4trace:configure.in:964: -1- AH_OUTPUT([HAVE_VSNPRINTF], [/* Define if you have a standard-conformant vsnprintf function. */
 @%:@undef HAVE_VSNPRINTF])
-m4trace:configure.ac:993: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+m4trace:configure.in:970: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:624: BASH_FUNC_STD_PUTENV is expanded from...
-configure.ac:993: the top level])
-m4trace:configure.ac:993: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_PUTENV])
-m4trace:configure.ac:993: -1- m4_pattern_allow([^HAVE_STD_PUTENV$])
-m4trace:configure.ac:995: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_PUTENV])
-m4trace:configure.ac:995: -1- m4_pattern_allow([^HAVE_STD_PUTENV$])
-m4trace:configure.ac:998: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2687: AC_TRY_LINK is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
-../../lib/autoconf/general.m4:2052: AC_CACHE_CHECK is expanded from...
+configure.in:970: the top level])
+m4trace:configure.in:970: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_PUTENV])
+m4trace:configure.in:970: -1- m4_pattern_allow([^HAVE_STD_PUTENV$])
+m4trace:configure.in:972: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_PUTENV])
+m4trace:configure.in:972: -1- m4_pattern_allow([^HAVE_STD_PUTENV$])
+m4trace:configure.in:975: -1- _m4_warn([obsolete], [The macro `AC_TRY_LINK' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2688: AC_TRY_LINK is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
+../../lib/autoconf/general.m4:2053: AC_CACHE_CHECK is expanded from...
 aclocal.m4:654: BASH_FUNC_STD_UNSETENV is expanded from...
-configure.ac:998: the top level])
-m4trace:configure.ac:998: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_UNSETENV])
-m4trace:configure.ac:998: -1- m4_pattern_allow([^HAVE_STD_UNSETENV$])
-m4trace:configure.ac:1000: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_UNSETENV])
-m4trace:configure.ac:1000: -1- m4_pattern_allow([^HAVE_STD_UNSETENV$])
-m4trace:configure.ac:1003: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:975: the top level])
+m4trace:configure.in:975: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_UNSETENV])
+m4trace:configure.in:975: -1- m4_pattern_allow([^HAVE_STD_UNSETENV$])
+m4trace:configure.in:977: -1- AC_DEFINE_TRACE_LITERAL([HAVE_STD_UNSETENV])
+m4trace:configure.in:977: -1- m4_pattern_allow([^HAVE_STD_UNSETENV$])
+m4trace:configure.in:980: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:878: BASH_FUNC_PRINTF_A_FORMAT is expanded from...
-configure.ac:1003: the top level])
-m4trace:configure.ac:1003: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PRINTF_A_FORMAT])
-m4trace:configure.ac:1003: -1- m4_pattern_allow([^HAVE_PRINTF_A_FORMAT$])
-m4trace:configure.ac:1006: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:980: the top level])
+m4trace:configure.in:980: -1- AC_DEFINE_TRACE_LITERAL([HAVE_PRINTF_A_FORMAT])
+m4trace:configure.in:980: -1- m4_pattern_allow([^HAVE_PRINTF_A_FORMAT$])
+m4trace:configure.in:983: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1297: BASH_SYS_REINSTALL_SIGHANDLERS is expanded from...
-configure.ac:1006: the top level])
-m4trace:configure.ac:1006: -1- AC_DEFINE_TRACE_LITERAL([MUST_REINSTALL_SIGHANDLERS])
-m4trace:configure.ac:1006: -1- m4_pattern_allow([^MUST_REINSTALL_SIGHANDLERS$])
-m4trace:configure.ac:1007: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:983: the top level])
+m4trace:configure.in:983: -1- AC_DEFINE_TRACE_LITERAL([MUST_REINSTALL_SIGHANDLERS])
+m4trace:configure.in:983: -1- m4_pattern_allow([^MUST_REINSTALL_SIGHANDLERS$])
+m4trace:configure.in:984: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1356: BASH_SYS_JOB_CONTROL_MISSING is expanded from...
-configure.ac:1007: the top level])
-m4trace:configure.ac:1007: -1- AC_DEFINE_TRACE_LITERAL([JOB_CONTROL_MISSING])
-m4trace:configure.ac:1007: -1- m4_pattern_allow([^JOB_CONTROL_MISSING$])
-m4trace:configure.ac:1008: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:984: the top level])
+m4trace:configure.in:984: -1- AC_DEFINE_TRACE_LITERAL([JOB_CONTROL_MISSING])
+m4trace:configure.in:984: -1- m4_pattern_allow([^JOB_CONTROL_MISSING$])
+m4trace:configure.in:985: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1415: BASH_SYS_NAMED_PIPES is expanded from...
-configure.ac:1008: the top level])
-m4trace:configure.ac:1008: -1- AC_DEFINE_TRACE_LITERAL([NAMED_PIPES_MISSING])
-m4trace:configure.ac:1008: -1- m4_pattern_allow([^NAMED_PIPES_MISSING$])
-m4trace:configure.ac:1011: -1- AC_DEFINE_TRACE_LITERAL([GWINSZ_IN_SYS_IOCTL])
-m4trace:configure.ac:1011: -1- m4_pattern_allow([^GWINSZ_IN_SYS_IOCTL$])
-m4trace:configure.ac:1011: -1- AH_OUTPUT([GWINSZ_IN_SYS_IOCTL], [/* Define to 1 if `TIOCGWINSZ\' requires <sys/ioctl.h>. */
+configure.in:985: the top level])
+m4trace:configure.in:985: -1- AC_DEFINE_TRACE_LITERAL([NAMED_PIPES_MISSING])
+m4trace:configure.in:985: -1- m4_pattern_allow([^NAMED_PIPES_MISSING$])
+m4trace:configure.in:988: -1- AC_DEFINE_TRACE_LITERAL([GWINSZ_IN_SYS_IOCTL])
+m4trace:configure.in:988: -1- m4_pattern_allow([^GWINSZ_IN_SYS_IOCTL$])
+m4trace:configure.in:988: -1- AH_OUTPUT([GWINSZ_IN_SYS_IOCTL], [/* Define to 1 if `TIOCGWINSZ\' requires <sys/ioctl.h>. */
 @%:@undef GWINSZ_IN_SYS_IOCTL])
-m4trace:configure.ac:1012: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+m4trace:configure.in:989: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1496: BASH_HAVE_TIOCSTAT is expanded from...
-configure.ac:1012: the top level])
-m4trace:configure.ac:1012: -1- AC_DEFINE_TRACE_LITERAL([TIOCSTAT_IN_SYS_IOCTL])
-m4trace:configure.ac:1012: -1- m4_pattern_allow([^TIOCSTAT_IN_SYS_IOCTL$])
-m4trace:configure.ac:1013: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:989: the top level])
+m4trace:configure.in:989: -1- AC_DEFINE_TRACE_LITERAL([TIOCSTAT_IN_SYS_IOCTL])
+m4trace:configure.in:989: -1- m4_pattern_allow([^TIOCSTAT_IN_SYS_IOCTL$])
+m4trace:configure.in:990: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1508: BASH_HAVE_FIONREAD is expanded from...
-configure.ac:1013: the top level])
-m4trace:configure.ac:1013: -1- AC_DEFINE_TRACE_LITERAL([FIONREAD_IN_SYS_IOCTL])
-m4trace:configure.ac:1013: -1- m4_pattern_allow([^FIONREAD_IN_SYS_IOCTL$])
-m4trace:configure.ac:1015: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:990: the top level])
+m4trace:configure.in:990: -1- AC_DEFINE_TRACE_LITERAL([FIONREAD_IN_SYS_IOCTL])
+m4trace:configure.in:990: -1- m4_pattern_allow([^FIONREAD_IN_SYS_IOCTL$])
+m4trace:configure.in:992: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1964: BASH_CHECK_WCONTINUED is expanded from...
-configure.ac:1015: the top level])
-m4trace:configure.ac:1015: -1- AC_DEFINE_TRACE_LITERAL([WCONTINUED_BROKEN])
-m4trace:configure.ac:1015: -1- m4_pattern_allow([^WCONTINUED_BROKEN$])
-m4trace:configure.ac:1018: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:992: the top level])
+m4trace:configure.in:992: -1- AC_DEFINE_TRACE_LITERAL([WCONTINUED_BROKEN])
+m4trace:configure.in:992: -1- m4_pattern_allow([^WCONTINUED_BROKEN$])
+m4trace:configure.in:995: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1526: BASH_CHECK_SPEED_T is expanded from...
-configure.ac:1018: the top level])
-m4trace:configure.ac:1018: -1- AC_DEFINE_TRACE_LITERAL([SPEED_T_IN_SYS_TYPES])
-m4trace:configure.ac:1018: -1- m4_pattern_allow([^SPEED_T_IN_SYS_TYPES$])
-m4trace:configure.ac:1019: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPW_DECLS])
-m4trace:configure.ac:1019: -1- m4_pattern_allow([^HAVE_GETPW_DECLS$])
-m4trace:configure.ac:1020: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2764: AC_TRY_RUN is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:995: the top level])
+m4trace:configure.in:995: -1- AC_DEFINE_TRACE_LITERAL([SPEED_T_IN_SYS_TYPES])
+m4trace:configure.in:995: -1- m4_pattern_allow([^SPEED_T_IN_SYS_TYPES$])
+m4trace:configure.in:996: -1- AC_DEFINE_TRACE_LITERAL([HAVE_GETPW_DECLS])
+m4trace:configure.in:996: -1- m4_pattern_allow([^HAVE_GETPW_DECLS$])
+m4trace:configure.in:997: -1- _m4_warn([obsolete], [The macro `AC_TRY_RUN' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2765: AC_TRY_RUN is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1653: BASH_CHECK_RTSIGS is expanded from...
-configure.ac:1020: the top level])
-m4trace:configure.ac:1020: -1- AC_DEFINE_TRACE_LITERAL([UNUSABLE_RT_SIGNALS])
-m4trace:configure.ac:1020: -1- m4_pattern_allow([^UNUSABLE_RT_SIGNALS$])
-m4trace:configure.ac:1021: -1- AC_SUBST([SIGLIST_O])
-m4trace:configure.ac:1021: -1- AC_SUBST_TRACE([SIGLIST_O])
-m4trace:configure.ac:1021: -1- m4_pattern_allow([^SIGLIST_O$])
-m4trace:configure.ac:1025: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:997: the top level])
+m4trace:configure.in:997: -1- AC_DEFINE_TRACE_LITERAL([UNUSABLE_RT_SIGNALS])
+m4trace:configure.in:997: -1- m4_pattern_allow([^UNUSABLE_RT_SIGNALS$])
+m4trace:configure.in:998: -1- AC_SUBST([SIGLIST_O])
+m4trace:configure.in:998: -1- AC_SUBST_TRACE([SIGLIST_O])
+m4trace:configure.in:998: -1- m4_pattern_allow([^SIGLIST_O$])
+m4trace:configure.in:1002: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1605: BASH_CHECK_KERNEL_RLIMIT is expanded from...
-configure.ac:1025: the top level])
-m4trace:configure.ac:1025: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
-You should run autoupdate.], [../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2590: _AC_COMPILE_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2606: AC_COMPILE_IFELSE is expanded from...
-../../lib/autoconf/general.m4:2614: AC_TRY_COMPILE is expanded from...
-../../lib/m4sugar/m4sh.m4:639: AS_IF is expanded from...
-../../lib/autoconf/general.m4:2031: AC_CACHE_VAL is expanded from...
+configure.in:1002: the top level])
+m4trace:configure.in:1002: -1- _m4_warn([obsolete], [The macro `AC_TRY_COMPILE' is obsolete.
+You should run autoupdate.], [../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2591: _AC_COMPILE_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2607: AC_COMPILE_IFELSE is expanded from...
+../../lib/autoconf/general.m4:2615: AC_TRY_COMPILE is expanded from...
+../../lib/m4sugar/m4sh.m4:606: AS_IF is expanded from...
+../../lib/autoconf/general.m4:2032: AC_CACHE_VAL is expanded from...
 aclocal.m4:1605: BASH_CHECK_KERNEL_RLIMIT is expanded from...
-configure.ac:1025: the top level])
-m4trace:configure.ac:1025: -1- AC_DEFINE_TRACE_LITERAL([RLIMIT_NEEDS_KERNEL])
-m4trace:configure.ac:1025: -1- m4_pattern_allow([^RLIMIT_NEEDS_KERNEL$])
-m4trace:configure.ac:1035: -1- AC_SUBST([TERMCAP_LIB])
-m4trace:configure.ac:1035: -1- AC_SUBST_TRACE([TERMCAP_LIB])
-m4trace:configure.ac:1035: -1- m4_pattern_allow([^TERMCAP_LIB$])
-m4trace:configure.ac:1036: -1- AC_SUBST([TERMCAP_DEP])
-m4trace:configure.ac:1036: -1- AC_SUBST_TRACE([TERMCAP_DEP])
-m4trace:configure.ac:1036: -1- m4_pattern_allow([^TERMCAP_DEP$])
-m4trace:configure.ac:1038: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_FD])
-m4trace:configure.ac:1038: -1- m4_pattern_allow([^HAVE_DEV_FD$])
-m4trace:configure.ac:1038: -1- AC_DEFINE_TRACE_LITERAL([DEV_FD_PREFIX])
-m4trace:configure.ac:1038: -1- m4_pattern_allow([^DEV_FD_PREFIX$])
-m4trace:configure.ac:1038: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_FD])
-m4trace:configure.ac:1038: -1- m4_pattern_allow([^HAVE_DEV_FD$])
-m4trace:configure.ac:1038: -1- AC_DEFINE_TRACE_LITERAL([DEV_FD_PREFIX])
-m4trace:configure.ac:1038: -1- m4_pattern_allow([^DEV_FD_PREFIX$])
-m4trace:configure.ac:1039: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_STDIN])
-m4trace:configure.ac:1039: -1- m4_pattern_allow([^HAVE_DEV_STDIN$])
-m4trace:configure.ac:1040: -1- AC_DEFINE_TRACE_LITERAL([DEFAULT_MAIL_DIRECTORY])
-m4trace:configure.ac:1040: -1- m4_pattern_allow([^DEFAULT_MAIL_DIRECTORY$])
-m4trace:configure.ac:1047: -1- AC_DEFINE_TRACE_LITERAL([JOB_CONTROL])
-m4trace:configure.ac:1047: -1- m4_pattern_allow([^JOB_CONTROL$])
-m4trace:configure.ac:1053: -1- AC_SUBST([JOBS_O])
-m4trace:configure.ac:1053: -1- AC_SUBST_TRACE([JOBS_O])
-m4trace:configure.ac:1053: -1- m4_pattern_allow([^JOBS_O$])
-m4trace:configure.ac:1066: -1- AC_DEFINE_TRACE_LITERAL([SVR4_2])
-m4trace:configure.ac:1066: -1- m4_pattern_allow([^SVR4_2$])
-m4trace:configure.ac:1067: -1- AC_DEFINE_TRACE_LITERAL([SVR4])
-m4trace:configure.ac:1067: -1- m4_pattern_allow([^SVR4$])
-m4trace:configure.ac:1068: -1- AC_DEFINE_TRACE_LITERAL([SVR4])
-m4trace:configure.ac:1068: -1- m4_pattern_allow([^SVR4$])
-m4trace:configure.ac:1069: -1- AC_DEFINE_TRACE_LITERAL([SVR5])
-m4trace:configure.ac:1069: -1- m4_pattern_allow([^SVR5$])
-m4trace:configure.ac:1088: -1- AC_DEFINE_TRACE_LITERAL([PGRP_PIPE])
-m4trace:configure.ac:1088: -1- m4_pattern_allow([^PGRP_PIPE$])
-m4trace:configure.ac:1136: -1- AC_SUBST([SHOBJ_CC])
-m4trace:configure.ac:1136: -1- AC_SUBST_TRACE([SHOBJ_CC])
-m4trace:configure.ac:1136: -1- m4_pattern_allow([^SHOBJ_CC$])
-m4trace:configure.ac:1137: -1- AC_SUBST([SHOBJ_CFLAGS])
-m4trace:configure.ac:1137: -1- AC_SUBST_TRACE([SHOBJ_CFLAGS])
-m4trace:configure.ac:1137: -1- m4_pattern_allow([^SHOBJ_CFLAGS$])
-m4trace:configure.ac:1138: -1- AC_SUBST([SHOBJ_LD])
-m4trace:configure.ac:1138: -1- AC_SUBST_TRACE([SHOBJ_LD])
-m4trace:configure.ac:1138: -1- m4_pattern_allow([^SHOBJ_LD$])
-m4trace:configure.ac:1139: -1- AC_SUBST([SHOBJ_LDFLAGS])
-m4trace:configure.ac:1139: -1- AC_SUBST_TRACE([SHOBJ_LDFLAGS])
-m4trace:configure.ac:1139: -1- m4_pattern_allow([^SHOBJ_LDFLAGS$])
-m4trace:configure.ac:1140: -1- AC_SUBST([SHOBJ_XLDFLAGS])
-m4trace:configure.ac:1140: -1- AC_SUBST_TRACE([SHOBJ_XLDFLAGS])
-m4trace:configure.ac:1140: -1- m4_pattern_allow([^SHOBJ_XLDFLAGS$])
-m4trace:configure.ac:1141: -1- AC_SUBST([SHOBJ_LIBS])
-m4trace:configure.ac:1141: -1- AC_SUBST_TRACE([SHOBJ_LIBS])
-m4trace:configure.ac:1141: -1- m4_pattern_allow([^SHOBJ_LIBS$])
-m4trace:configure.ac:1142: -1- AC_SUBST([SHOBJ_STATUS])
-m4trace:configure.ac:1142: -1- AC_SUBST_TRACE([SHOBJ_STATUS])
-m4trace:configure.ac:1142: -1- m4_pattern_allow([^SHOBJ_STATUS$])
-m4trace:configure.ac:1174: -1- AC_SUBST([PROFILE_FLAGS])
-m4trace:configure.ac:1174: -1- AC_SUBST_TRACE([PROFILE_FLAGS])
-m4trace:configure.ac:1174: -1- m4_pattern_allow([^PROFILE_FLAGS$])
-m4trace:configure.ac:1176: -1- AC_SUBST([incdir])
-m4trace:configure.ac:1176: -1- AC_SUBST_TRACE([incdir])
-m4trace:configure.ac:1176: -1- m4_pattern_allow([^incdir$])
-m4trace:configure.ac:1177: -1- AC_SUBST([BUILD_DIR])
-m4trace:configure.ac:1177: -1- AC_SUBST_TRACE([BUILD_DIR])
-m4trace:configure.ac:1177: -1- m4_pattern_allow([^BUILD_DIR$])
-m4trace:configure.ac:1180: -1- AC_SUBST([datarootdir])
-m4trace:configure.ac:1180: -1- AC_SUBST_TRACE([datarootdir])
-m4trace:configure.ac:1180: -1- m4_pattern_allow([^datarootdir$])
-m4trace:configure.ac:1181: -1- AC_SUBST([localedir])
-m4trace:configure.ac:1181: -1- AC_SUBST_TRACE([localedir])
-m4trace:configure.ac:1181: -1- m4_pattern_allow([^localedir$])
-m4trace:configure.ac:1183: -1- AC_SUBST([YACC])
-m4trace:configure.ac:1183: -1- AC_SUBST_TRACE([YACC])
-m4trace:configure.ac:1183: -1- m4_pattern_allow([^YACC$])
-m4trace:configure.ac:1184: -1- AC_SUBST([AR])
-m4trace:configure.ac:1184: -1- AC_SUBST_TRACE([AR])
-m4trace:configure.ac:1184: -1- m4_pattern_allow([^AR$])
-m4trace:configure.ac:1185: -1- AC_SUBST([ARFLAGS])
-m4trace:configure.ac:1185: -1- AC_SUBST_TRACE([ARFLAGS])
-m4trace:configure.ac:1185: -1- m4_pattern_allow([^ARFLAGS$])
-m4trace:configure.ac:1187: -1- AC_SUBST([BASHVERS])
-m4trace:configure.ac:1187: -1- AC_SUBST_TRACE([BASHVERS])
-m4trace:configure.ac:1187: -1- m4_pattern_allow([^BASHVERS$])
-m4trace:configure.ac:1188: -1- AC_SUBST([RELSTATUS])
-m4trace:configure.ac:1188: -1- AC_SUBST_TRACE([RELSTATUS])
-m4trace:configure.ac:1188: -1- m4_pattern_allow([^RELSTATUS$])
-m4trace:configure.ac:1189: -1- AC_SUBST([DEBUG])
-m4trace:configure.ac:1189: -1- AC_SUBST_TRACE([DEBUG])
-m4trace:configure.ac:1189: -1- m4_pattern_allow([^DEBUG$])
-m4trace:configure.ac:1190: -1- AC_SUBST([MALLOC_DEBUG])
-m4trace:configure.ac:1190: -1- AC_SUBST_TRACE([MALLOC_DEBUG])
-m4trace:configure.ac:1190: -1- m4_pattern_allow([^MALLOC_DEBUG$])
-m4trace:configure.ac:1192: -1- AC_SUBST([host_cpu])
-m4trace:configure.ac:1192: -1- AC_SUBST_TRACE([host_cpu])
-m4trace:configure.ac:1192: -1- m4_pattern_allow([^host_cpu$])
-m4trace:configure.ac:1193: -1- AC_SUBST([host_vendor])
-m4trace:configure.ac:1193: -1- AC_SUBST_TRACE([host_vendor])
-m4trace:configure.ac:1193: -1- m4_pattern_allow([^host_vendor$])
-m4trace:configure.ac:1194: -1- AC_SUBST([host_os])
-m4trace:configure.ac:1194: -1- AC_SUBST_TRACE([host_os])
-m4trace:configure.ac:1194: -1- m4_pattern_allow([^host_os$])
-m4trace:configure.ac:1196: -1- AC_SUBST([LOCAL_LIBS])
-m4trace:configure.ac:1196: -1- AC_SUBST_TRACE([LOCAL_LIBS])
-m4trace:configure.ac:1196: -1- m4_pattern_allow([^LOCAL_LIBS$])
-m4trace:configure.ac:1197: -1- AC_SUBST([LOCAL_CFLAGS])
-m4trace:configure.ac:1197: -1- AC_SUBST_TRACE([LOCAL_CFLAGS])
-m4trace:configure.ac:1197: -1- m4_pattern_allow([^LOCAL_CFLAGS$])
-m4trace:configure.ac:1198: -1- AC_SUBST([LOCAL_LDFLAGS])
-m4trace:configure.ac:1198: -1- AC_SUBST_TRACE([LOCAL_LDFLAGS])
-m4trace:configure.ac:1198: -1- m4_pattern_allow([^LOCAL_LDFLAGS$])
-m4trace:configure.ac:1199: -1- AC_SUBST([LOCAL_DEFS])
-m4trace:configure.ac:1199: -1- AC_SUBST_TRACE([LOCAL_DEFS])
-m4trace:configure.ac:1199: -1- m4_pattern_allow([^LOCAL_DEFS$])
-m4trace:configure.ac:1204: -1- AC_CONFIG_FILES([Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile \
+configure.in:1002: the top level])
+m4trace:configure.in:1002: -1- AC_DEFINE_TRACE_LITERAL([RLIMIT_NEEDS_KERNEL])
+m4trace:configure.in:1002: -1- m4_pattern_allow([^RLIMIT_NEEDS_KERNEL$])
+m4trace:configure.in:1012: -1- AC_SUBST([TERMCAP_LIB])
+m4trace:configure.in:1012: -1- AC_SUBST_TRACE([TERMCAP_LIB])
+m4trace:configure.in:1012: -1- m4_pattern_allow([^TERMCAP_LIB$])
+m4trace:configure.in:1013: -1- AC_SUBST([TERMCAP_DEP])
+m4trace:configure.in:1013: -1- AC_SUBST_TRACE([TERMCAP_DEP])
+m4trace:configure.in:1013: -1- m4_pattern_allow([^TERMCAP_DEP$])
+m4trace:configure.in:1015: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_FD])
+m4trace:configure.in:1015: -1- m4_pattern_allow([^HAVE_DEV_FD$])
+m4trace:configure.in:1015: -1- AC_DEFINE_TRACE_LITERAL([DEV_FD_PREFIX])
+m4trace:configure.in:1015: -1- m4_pattern_allow([^DEV_FD_PREFIX$])
+m4trace:configure.in:1015: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_FD])
+m4trace:configure.in:1015: -1- m4_pattern_allow([^HAVE_DEV_FD$])
+m4trace:configure.in:1015: -1- AC_DEFINE_TRACE_LITERAL([DEV_FD_PREFIX])
+m4trace:configure.in:1015: -1- m4_pattern_allow([^DEV_FD_PREFIX$])
+m4trace:configure.in:1016: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DEV_STDIN])
+m4trace:configure.in:1016: -1- m4_pattern_allow([^HAVE_DEV_STDIN$])
+m4trace:configure.in:1017: -1- AC_DEFINE_TRACE_LITERAL([DEFAULT_MAIL_DIRECTORY])
+m4trace:configure.in:1017: -1- m4_pattern_allow([^DEFAULT_MAIL_DIRECTORY$])
+m4trace:configure.in:1024: -1- AC_DEFINE_TRACE_LITERAL([JOB_CONTROL])
+m4trace:configure.in:1024: -1- m4_pattern_allow([^JOB_CONTROL$])
+m4trace:configure.in:1030: -1- AC_SUBST([JOBS_O])
+m4trace:configure.in:1030: -1- AC_SUBST_TRACE([JOBS_O])
+m4trace:configure.in:1030: -1- m4_pattern_allow([^JOBS_O$])
+m4trace:configure.in:1043: -1- AC_DEFINE_TRACE_LITERAL([SVR4_2])
+m4trace:configure.in:1043: -1- m4_pattern_allow([^SVR4_2$])
+m4trace:configure.in:1044: -1- AC_DEFINE_TRACE_LITERAL([SVR4])
+m4trace:configure.in:1044: -1- m4_pattern_allow([^SVR4$])
+m4trace:configure.in:1045: -1- AC_DEFINE_TRACE_LITERAL([SVR4])
+m4trace:configure.in:1045: -1- m4_pattern_allow([^SVR4$])
+m4trace:configure.in:1046: -1- AC_DEFINE_TRACE_LITERAL([SVR5])
+m4trace:configure.in:1046: -1- m4_pattern_allow([^SVR5$])
+m4trace:configure.in:1065: -1- AC_DEFINE_TRACE_LITERAL([PGRP_PIPE])
+m4trace:configure.in:1065: -1- m4_pattern_allow([^PGRP_PIPE$])
+m4trace:configure.in:1112: -1- AC_SUBST([SHOBJ_CC])
+m4trace:configure.in:1112: -1- AC_SUBST_TRACE([SHOBJ_CC])
+m4trace:configure.in:1112: -1- m4_pattern_allow([^SHOBJ_CC$])
+m4trace:configure.in:1113: -1- AC_SUBST([SHOBJ_CFLAGS])
+m4trace:configure.in:1113: -1- AC_SUBST_TRACE([SHOBJ_CFLAGS])
+m4trace:configure.in:1113: -1- m4_pattern_allow([^SHOBJ_CFLAGS$])
+m4trace:configure.in:1114: -1- AC_SUBST([SHOBJ_LD])
+m4trace:configure.in:1114: -1- AC_SUBST_TRACE([SHOBJ_LD])
+m4trace:configure.in:1114: -1- m4_pattern_allow([^SHOBJ_LD$])
+m4trace:configure.in:1115: -1- AC_SUBST([SHOBJ_LDFLAGS])
+m4trace:configure.in:1115: -1- AC_SUBST_TRACE([SHOBJ_LDFLAGS])
+m4trace:configure.in:1115: -1- m4_pattern_allow([^SHOBJ_LDFLAGS$])
+m4trace:configure.in:1116: -1- AC_SUBST([SHOBJ_XLDFLAGS])
+m4trace:configure.in:1116: -1- AC_SUBST_TRACE([SHOBJ_XLDFLAGS])
+m4trace:configure.in:1116: -1- m4_pattern_allow([^SHOBJ_XLDFLAGS$])
+m4trace:configure.in:1117: -1- AC_SUBST([SHOBJ_LIBS])
+m4trace:configure.in:1117: -1- AC_SUBST_TRACE([SHOBJ_LIBS])
+m4trace:configure.in:1117: -1- m4_pattern_allow([^SHOBJ_LIBS$])
+m4trace:configure.in:1118: -1- AC_SUBST([SHOBJ_STATUS])
+m4trace:configure.in:1118: -1- AC_SUBST_TRACE([SHOBJ_STATUS])
+m4trace:configure.in:1118: -1- m4_pattern_allow([^SHOBJ_STATUS$])
+m4trace:configure.in:1150: -1- AC_SUBST([PROFILE_FLAGS])
+m4trace:configure.in:1150: -1- AC_SUBST_TRACE([PROFILE_FLAGS])
+m4trace:configure.in:1150: -1- m4_pattern_allow([^PROFILE_FLAGS$])
+m4trace:configure.in:1152: -1- AC_SUBST([incdir])
+m4trace:configure.in:1152: -1- AC_SUBST_TRACE([incdir])
+m4trace:configure.in:1152: -1- m4_pattern_allow([^incdir$])
+m4trace:configure.in:1153: -1- AC_SUBST([BUILD_DIR])
+m4trace:configure.in:1153: -1- AC_SUBST_TRACE([BUILD_DIR])
+m4trace:configure.in:1153: -1- m4_pattern_allow([^BUILD_DIR$])
+m4trace:configure.in:1156: -1- AC_SUBST([datarootdir])
+m4trace:configure.in:1156: -1- AC_SUBST_TRACE([datarootdir])
+m4trace:configure.in:1156: -1- m4_pattern_allow([^datarootdir$])
+m4trace:configure.in:1157: -1- AC_SUBST([localedir])
+m4trace:configure.in:1157: -1- AC_SUBST_TRACE([localedir])
+m4trace:configure.in:1157: -1- m4_pattern_allow([^localedir$])
+m4trace:configure.in:1159: -1- AC_SUBST([YACC])
+m4trace:configure.in:1159: -1- AC_SUBST_TRACE([YACC])
+m4trace:configure.in:1159: -1- m4_pattern_allow([^YACC$])
+m4trace:configure.in:1160: -1- AC_SUBST([AR])
+m4trace:configure.in:1160: -1- AC_SUBST_TRACE([AR])
+m4trace:configure.in:1160: -1- m4_pattern_allow([^AR$])
+m4trace:configure.in:1161: -1- AC_SUBST([ARFLAGS])
+m4trace:configure.in:1161: -1- AC_SUBST_TRACE([ARFLAGS])
+m4trace:configure.in:1161: -1- m4_pattern_allow([^ARFLAGS$])
+m4trace:configure.in:1163: -1- AC_SUBST([BASHVERS])
+m4trace:configure.in:1163: -1- AC_SUBST_TRACE([BASHVERS])
+m4trace:configure.in:1163: -1- m4_pattern_allow([^BASHVERS$])
+m4trace:configure.in:1164: -1- AC_SUBST([RELSTATUS])
+m4trace:configure.in:1164: -1- AC_SUBST_TRACE([RELSTATUS])
+m4trace:configure.in:1164: -1- m4_pattern_allow([^RELSTATUS$])
+m4trace:configure.in:1165: -1- AC_SUBST([DEBUG])
+m4trace:configure.in:1165: -1- AC_SUBST_TRACE([DEBUG])
+m4trace:configure.in:1165: -1- m4_pattern_allow([^DEBUG$])
+m4trace:configure.in:1166: -1- AC_SUBST([MALLOC_DEBUG])
+m4trace:configure.in:1166: -1- AC_SUBST_TRACE([MALLOC_DEBUG])
+m4trace:configure.in:1166: -1- m4_pattern_allow([^MALLOC_DEBUG$])
+m4trace:configure.in:1168: -1- AC_SUBST([host_cpu])
+m4trace:configure.in:1168: -1- AC_SUBST_TRACE([host_cpu])
+m4trace:configure.in:1168: -1- m4_pattern_allow([^host_cpu$])
+m4trace:configure.in:1169: -1- AC_SUBST([host_vendor])
+m4trace:configure.in:1169: -1- AC_SUBST_TRACE([host_vendor])
+m4trace:configure.in:1169: -1- m4_pattern_allow([^host_vendor$])
+m4trace:configure.in:1170: -1- AC_SUBST([host_os])
+m4trace:configure.in:1170: -1- AC_SUBST_TRACE([host_os])
+m4trace:configure.in:1170: -1- m4_pattern_allow([^host_os$])
+m4trace:configure.in:1172: -1- AC_SUBST([LOCAL_LIBS])
+m4trace:configure.in:1172: -1- AC_SUBST_TRACE([LOCAL_LIBS])
+m4trace:configure.in:1172: -1- m4_pattern_allow([^LOCAL_LIBS$])
+m4trace:configure.in:1173: -1- AC_SUBST([LOCAL_CFLAGS])
+m4trace:configure.in:1173: -1- AC_SUBST_TRACE([LOCAL_CFLAGS])
+m4trace:configure.in:1173: -1- m4_pattern_allow([^LOCAL_CFLAGS$])
+m4trace:configure.in:1174: -1- AC_SUBST([LOCAL_LDFLAGS])
+m4trace:configure.in:1174: -1- AC_SUBST_TRACE([LOCAL_LDFLAGS])
+m4trace:configure.in:1174: -1- m4_pattern_allow([^LOCAL_LDFLAGS$])
+m4trace:configure.in:1175: -1- AC_SUBST([LOCAL_DEFS])
+m4trace:configure.in:1175: -1- AC_SUBST_TRACE([LOCAL_DEFS])
+m4trace:configure.in:1175: -1- m4_pattern_allow([^LOCAL_DEFS$])
+m4trace:configure.in:1180: -1- AC_CONFIG_FILES([Makefile builtins/Makefile lib/readline/Makefile lib/glob/Makefile \
          lib/intl/Makefile \
          lib/malloc/Makefile lib/sh/Makefile lib/termcap/Makefile \
          lib/tilde/Makefile doc/Makefile support/Makefile po/Makefile.in \
          examples/loadables/Makefile examples/loadables/perl/Makefile])
-m4trace:configure.ac:1204: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments.
+m4trace:configure.in:1180: -1- _m4_warn([obsolete], [AC_OUTPUT should be used without arguments.
 You should run autoupdate.], [])
-m4trace:configure.ac:1204: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
-m4trace:configure.ac:1204: -1- m4_pattern_allow([^LIB@&t@OBJS$])
-m4trace:configure.ac:1204: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([LTLIBOBJS])
-m4trace:configure.ac:1204: -1- m4_pattern_allow([^LTLIBOBJS$])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([top_builddir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([top_build_prefix])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([srcdir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([abs_srcdir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([top_srcdir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([abs_top_srcdir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([builddir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([abs_builddir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([abs_top_builddir])
-m4trace:configure.ac:1204: -1- AC_SUBST_TRACE([INSTALL])
+m4trace:configure.in:1180: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([LIB@&t@OBJS])
+m4trace:configure.in:1180: -1- m4_pattern_allow([^LIB@&t@OBJS$])
+m4trace:configure.in:1180: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([LTLIBOBJS])
+m4trace:configure.in:1180: -1- m4_pattern_allow([^LTLIBOBJS$])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([top_builddir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([top_build_prefix])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([srcdir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([abs_srcdir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([top_srcdir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([abs_top_srcdir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([builddir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([abs_builddir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([abs_top_builddir])
+m4trace:configure.in:1180: -1- AC_SUBST_TRACE([INSTALL])
diff --git a/autom4te.cache/traces.1t b/autom4te.cache/traces.1t
new file mode 100644 (file)
index 0000000..c166ffa
--- /dev/null
@@ -0,0 +1,53 @@
+m4trace:configure.ac:29: -1- AC_INIT([bash], [4.3-release], [bug-bash@gnu.org])
+m4trace:configure.ac:29: -1- m4_pattern_forbid([^_?A[CHUM]_])
+m4trace:configure.ac:29: -1- m4_pattern_forbid([_AC_])
+m4trace:configure.ac:29: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
+m4trace:configure.ac:29: -1- m4_pattern_allow([^AS_FLAGS$])
+m4trace:configure.ac:29: -1- m4_pattern_forbid([^_?m4_])
+m4trace:configure.ac:29: -1- m4_pattern_forbid([^dnl$])
+m4trace:configure.ac:29: -1- m4_pattern_forbid([^_?AS_])
+m4trace:configure.ac:29: -1- AC_SUBST([SHELL], [${CONFIG_SHELL-/bin/sh}])
+m4trace:configure.ac:29: -1- AC_SUBST([PATH_SEPARATOR])
+m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME],      ['AC_PACKAGE_NAME'])])
+m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME],   ['AC_PACKAGE_TARNAME'])])
+m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION],   ['AC_PACKAGE_VERSION'])])
+m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING],    ['AC_PACKAGE_STRING'])])
+m4trace:configure.ac:29: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])])
+m4trace:configure.ac:29: -1- AC_SUBST([exec_prefix], [NONE])
+m4trace:configure.ac:29: -1- AC_SUBST([prefix], [NONE])
+m4trace:configure.ac:29: -1- AC_SUBST([program_transform_name], [s,x,x,])
+m4trace:configure.ac:29: -1- AC_SUBST([bindir], ['${exec_prefix}/bin'])
+m4trace:configure.ac:29: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin'])
+m4trace:configure.ac:29: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec'])
+m4trace:configure.ac:29: -1- AC_SUBST([datadir], ['${prefix}/share'])
+m4trace:configure.ac:29: -1- AC_SUBST([sysconfdir], ['${prefix}/etc'])
+m4trace:configure.ac:29: -1- AC_SUBST([sharedstatedir], ['${prefix}/com'])
+m4trace:configure.ac:29: -1- AC_SUBST([localstatedir], ['${prefix}/var'])
+m4trace:configure.ac:29: -1- AC_SUBST([libdir], ['${exec_prefix}/lib'])
+m4trace:configure.ac:29: -1- AC_SUBST([includedir], ['${prefix}/include'])
+m4trace:configure.ac:29: -1- AC_SUBST([oldincludedir], ['/usr/include'])
+m4trace:configure.ac:29: -1- AC_SUBST([infodir], ['${prefix}/info'])
+m4trace:configure.ac:29: -1- AC_SUBST([mandir], ['${prefix}/man'])
+m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME])
+m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */
+#undef PACKAGE_NAME])
+m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME])
+m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME])
+m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION])
+m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */
+#undef PACKAGE_VERSION])
+m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING])
+m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING])
+m4trace:configure.ac:29: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT])
+m4trace:configure.ac:29: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT])
+m4trace:configure.ac:29: -1- AC_SUBST([build_alias])
+m4trace:configure.ac:29: -1- AC_SUBST([host_alias])
+m4trace:configure.ac:29: -1- AC_SUBST([target_alias])
+m4trace:configure.ac:29: -1- AC_SUBST([DEFS])
+m4trace:configure.ac:29: -1- AC_SUBST([ECHO_C])
+m4trace:configure.ac:29: -1- AC_SUBST([ECHO_N])
+m4trace:configure.ac:29: -1- AC_SUBST([ECHO_T])
+m4trace:configure.ac:29: -1- AC_SUBST([LIBS])
diff --git a/builtins/return.def~ b/builtins/return.def~
new file mode 100644 (file)
index 0000000..fb036f9
--- /dev/null
@@ -0,0 +1,80 @@
+This file is return.def, from which is created return.c.
+It implements the builtin "return" in Bash.
+
+Copyright (C) 1987-2009 Free Software Foundation, Inc.
+
+This file is part of GNU Bash, the Bourne Again SHell.
+
+Bash is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+Bash is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+
+$PRODUCES return.c
+
+$BUILTIN return
+
+$FUNCTION return_builtin
+$SHORT_DOC return [n]
+Return from a shell function.
+
+Causes a function or sourced script to exit with the return value
+specified by N.  If N is omitted, the return status is that of the
+last command executed within the function or script.
+
+Exit Status:
+Returns N, or failure if the shell is not executing a function or script.
+$END
+
+#include <config.h>
+
+#if defined (HAVE_UNISTD_H)
+#  ifdef _MINIX
+#    include <sys/types.h>
+#  endif
+#  include <unistd.h>
+#endif
+
+#include "../bashintl.h"
+
+#include "../shell.h"
+#include "common.h"
+#include "bashgetopt.h"
+
+extern int last_command_exit_value;
+extern int subshell_environment;
+extern int return_catch_flag, return_catch_value;
+extern int running_trap;
+
+/* If we are executing a user-defined function then exit with the value
+   specified as an argument.  if no argument is given, then the last
+   exit status is used. */
+int
+return_builtin (list)
+     WORD_LIST *list;
+{
+#if 0
+  if (no_options (list))
+    return (EX_USAGE);
+  list = loptend;      /* skip over possible `--' */
+#endif
+
+itrace("return_builtin: running_trap = %d", running_trap);
+  return_catch_value = get_exitstat (list);
+
+  if (return_catch_flag)
+    longjmp (return_catch, 1);
+  else
+    {
+      builtin_error (_("can only `return' from a function or sourced script"));
+      return (EXECUTION_FAILURE);
+    }
+}
diff --git a/cross-build/cygwin32.cache.old b/cross-build/cygwin32.cache.old
new file mode 100644 (file)
index 0000000..640390f
--- /dev/null
@@ -0,0 +1,42 @@
+# This file is a shell script that caches the results of configure
+# tests for CYGWIN32 so they don't need to be done when cross-compiling.
+
+# AC_FUNC_GETPGRP should also define GETPGRP_VOID
+ac_cv_func_getpgrp_void=${ac_cv_func_getpgrp_void='yes'}
+# AC_FUNC_SETVBUF_REVERSED should not define anything else
+ac_cv_func_setvbuf_reversed=${ac_cv_func_setvbuf_reversed='no'}
+# on CYGWIN32, system calls do not restart
+ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}
+bash_cv_sys_restartable_syscalls=${bash_cv_sys_restartable_syscalls='no'}
+
+# these may be necessary, but they are currently commented out
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='no'}
+ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p='4'}
+ac_cv_sizeof_int=${ac_cv_sizeof_int='4'}
+ac_cv_sizeof_long=${ac_cv_sizeof_long='4'}
+ac_cv_sizeof_double=${ac_cv_sizeof_double='8'}
+
+bash_cv_dup2_broken=${bash_cv_dup2_broken='no'}
+bash_cv_pgrp_pipe=${bash_cv_pgrp_pipe='no'}
+bash_cv_type_rlimit=${bash_cv_type_rlimit='long'}
+bash_cv_decl_under_sys_siglist=${bash_cv_decl_under_sys_siglist='no'}
+bash_cv_under_sys_siglist=${bash_cv_under_sys_siglist='no'}
+bash_cv_sys_siglist=${bash_cv_sys_siglist='no'}
+bash_cv_opendir_not_robust=${bash_cv_opendir_not_robust='no'}
+bash_cv_getenv_redef=${bash_cv_getenv_redef='yes'}
+bash_cv_printf_declared=${bash_cv_printf_declared='yes'}
+bash_cv_ulimit_maxfds=${bash_cv_ulimit_maxfds='no'}
+bash_cv_getcwd_calls_popen=${bash_cv_getcwd_calls_popen='no'}
+bash_cv_must_reinstall_sighandlers=${bash_cv_must_reinstall_sighandlers='no'}
+bash_cv_job_control_missing=${bash_cv_job_control_missing='present'}
+bash_cv_sys_named_pipes=${bash_cv_sys_named_pipes='missing'}
+bash_cv_func_sigsetjmp=${bash_cv_func_sigsetjmp='missing'}
+bash_cv_mail_dir=${bash_cv_mail_dir='unknown'}
+bash_cv_func_strcoll_broken=${bash_cv_func_strcoll_broken='no'}
+
+bash_cv_type_int32_t=${bash_cv_type_int32_t='int'}
+bash_cv_type_u_int32_t=${bash_cv_type_u_int32_t='int'}
+
+ac_cv_type_bits64_t=${ac_cv_type_bits64_t='no'}
+
+# end of cross-build/cygwin32.cache
diff --git a/doc/FAQ.orig b/doc/FAQ.orig
new file mode 100644 (file)
index 0000000..1cff3c8
--- /dev/null
@@ -0,0 +1,1745 @@
+This is the Bash FAQ, version 3.24, for Bash version 2.05b.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be sent to
+chet@po.cwru.edu.
+
+This document is available for anonymous FTP with the URL
+
+ftp://ftp.cwru.edu/pub/bash/FAQ
+
+The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
+
+----------
+Contents:
+
+Section A:  The Basics
+
+A1) What is it?
+A2) What's the latest version?
+A3) Where can I get it?
+A4) On what machines will bash run?
+A5) Will bash run on operating systems other than Unix?
+A6) How can I build bash with gcc?
+A7) How can I make bash my login shell?
+A8) I just changed my login shell to bash, and now I can't FTP into my
+    machine.  Why not?
+A9) What's the `POSIX 1003.2 standard'?
+A10) What is the bash `posix mode'?
+
+Section B:  The latest version
+
+B1) What's new in version 2.05b?
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+    bash-1.14.7?
+
+Section C:  Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+C2) How does bash differ from the Korn shell, version ksh88?
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+    `which command' says it will?
+D2) Why doesn't bash treat brace expansions exactly like csh?
+D3) Why doesn't bash have csh variable modifiers?
+D4) How can I make my csh aliases work when I convert to bash?
+D5) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+D6) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+Section E:  Why does bash do certain things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+E2) Why does bash sometimes say `Broken pipe'?
+E3) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+E4) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+E7) What about empty for loops in Makefiles?
+E8) Why does the arithmetic evaluation code complain about `08'?
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+    with every letter except `z'?
+E10) Why does `cd //' leave $PWD as `//'?
+E11) If I resize my xterm while another program is running, why doesn't bash
+     notice the change?
+
+Section F:  Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+F2) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+F3) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+F5) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+F7) Why do bash-2.05a and  bash-2.05b fail to compile `printf.def' on
+    HP/UX 11.x?
+
+Section G:  How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+G2) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+G3) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+G4) How can I make the bash `time' reserved word print timing output that
+    looks like the output from my system's /usr/bin/time?
+G5) How do I get the current directory into my prompt?
+G6) How can I rename "*.foo" to "*.bar"?
+G7) How can I translate a filename from uppercase to lowercase?
+G8) How can I write a filename expansion (globbing) pattern that will match
+    all files in the current directory except "." and ".."?
+
+Section H:  Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+H2) What kind of bash documentation is there?
+H3) What's coming in future versions?
+H4) What's on the bash `wish list'?
+H5) When will the next release appear?
+
+----------
+Section A:  The Basics
+
+A1)  What is it?
+
+Bash is a Unix command interpreter (shell).  It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming.  Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion.  Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation.  The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+A2)  What's the latest version?
+
+The latest version is 2.05b, first made available on Wednesday, 17
+July, 2002.
+
+A3)  Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, ftp.gnu.org, and its mirrors.  The
+latest version is also available for FTP from ftp.cwru.edu.
+The following URLs tell how to get version 2.05b:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-2.05b.tar.gz
+
+Formatted versions of the documentation are available with the URLs:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-2.05b.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-2.05b.tar.gz
+
+A4)  On what machines will bash run?
+
+Bash has been ported to nearly every version of UNIX.  All you
+should have to do to build it on a machine for which a port
+exists is to type `configure' and then `make'.  The build process
+will attempt to discover the version of UNIX you have and tailor
+itself accordingly, using a script created by GNU autoconf.
+
+More information appears in the file `INSTALL' in the distribution.
+
+The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
+explains how to obtain binary versions of bash for most of the major
+commercial Unix systems.
+
+A5) Will bash run on operating systems other than Unix?
+
+Configuration specifics for Unix-like systems such as QNX and
+LynxOS are included in the distribution.  Bash-2.05 and later
+versions should compile and run on Minix 2.0 (patches were
+contributed), but I don't believe anyone has built bash-2.x on
+earlier Minix versions yet. 
+
+Bash has been ported to versions of Windows implementing the Win32
+programming interface.  This includes Windows 95 and Windows NT.
+The port was done by Cygnus Solutions as part of their CYGWIN
+project.  For more information about the project, look at the URLs
+
+http://www.cygwin.com/
+http://sourceware.cygnus.com/cygwin
+
+Cygnus originally ported bash-1.14.7, and that port was part of their
+early GNU-Win32 (the original name) releases.  Cygnus has also done a
+port of bash-2.05 to the CYGWIN environment, and it is available as
+part of their current release.
+
+Bash-2.05b should require no local Cygnus changes to build and run under
+CYGWIN.
+
+The Cygnus port works only on Intel machines.  There is a port of bash
+(I don't know which version) to the alpha/NT environment available from
+
+ftp://ftp.gnustep.org//pub/win32/bash-alpha-nt-1.01.tar.gz
+
+DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
+of the DJGPP project.  For more information on the project, see
+
+http://www.delorie.com/djgpp/
+
+I have been told that the original DJGPP port was done by Daisuke Aoyama.
+
+Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
+is available for DJGPP V2.  The files are available as:
+
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
+
+Mark has begun to work with bash-2.05, but I don't know the status.
+
+Ports of bash-1.12 and bash-2.0 are available for OS/2 from
+
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash_112.zip
+ftp://hobbes.nmsu.edu/pub/os2/util/shell/bash-2.0(253).zip
+
+I haven't looked at either, but the second appears to be a binary-only
+distribution.  Beware.
+
+I have received word that Bash (I'm not sure which version, but I
+believe that it's at least bash-2.02.1) is the standard shell on
+BeOS.
+
+A6) How can I build bash with gcc? 
+
+Bash configures to use gcc by default if it is available.  Read the
+file INSTALL in the distribution for more information.
+
+A7)  How can I make bash my login shell?
+
+Some machines let you use `chsh' to change your login shell.  Other
+systems use `passwd -s' or `passwd -e'.  If one of these works for
+you, that's all you need.  Note that many systems require the full
+pathname to a shell to appear in /etc/shells before you can make it
+your login shell.  For this, you may need the assistance of your
+friendly local system administrator. 
+
+If you cannot do this, you can still use bash as your login shell, but
+you need to perform some tricks.  The basic idea is to add a command
+to your login shell's startup file to replace your login shell with
+bash.
+
+For example, if your login shell is csh or tcsh, and you have installed
+bash in /usr/gnu/bin/bash, add the following line to ~/.login:
+
+       if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
+
+(the `--login' tells bash that it is a login shell).
+
+It's not a good idea to put this command into ~/.cshrc, because every
+csh you run without the `-f' option, even ones started to run csh scripts,
+reads that file.  If you must put the command in ~/.cshrc, use something
+like
+
+       if ( $?prompt ) exec /usr/gnu/bin/bash --login
+
+to ensure that bash is exec'd only when the csh is interactive.
+
+If your login shell is sh or ksh, you have to do two things.
+
+First, create an empty file in your home directory named `.bash_profile'.
+The existence of this file will prevent the exec'd bash from trying to
+read ~/.profile, and re-execing itself over and over again.  ~/.bash_profile
+is the first file bash tries to read initialization commands from when
+it is invoked as a login shell.
+
+Next, add a line similar to the above to ~/.profile:
+
+       [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
+               exec /usr/gnu/bin/bash --login
+
+This will cause login shells to replace themselves with bash running as
+a login shell.  Once you have this working, you can copy your initialization
+code from ~/.profile to ~/.bash_profile.
+
+I have received word that the recipe supplied above is insufficient for
+machines running CDE.  CDE has a maze of twisty little startup files, all
+slightly different.
+
+If you cannot change your login shell in the password file to bash, you
+will have to (apparently) live with CDE using the shell in the password
+file to run its startup scripts.  If you have changed your shell to bash,
+there is code in the CDE startup files (on Solaris, at least) that attempts
+to do the right thing.  It is, however, often broken, and may require that
+you use the $BASH_ENV trick described below.
+
+`dtterm' claims to use $SHELL as the default program to start, so if you
+can change $SHELL in the CDE startup files, you should be able to use bash
+in your terminal windows.
+
+Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
+to read your login shell's startup files.  You may be able to use bash for
+the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
+well, but I have not tried this.
+
+You can use the above `exec' recipe to start bash when not logging in with
+CDE by testing the value of the DT variable:
+
+       if [ -n "$DT" ]; then
+               [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
+       fi
+
+If CDE starts its shells non-interactively during login, the login shell
+startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
+To get around this problem, append a line similar to the following to your
+~/.dtprofile:
+
+       BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
+
+and add the following line to the beginning of ~/.bash_profile:
+
+       unset BASH_ENV
+
+A8) I just changed my login shell to bash, and now I can't FTP into my
+   machine.  Why not?
+
+You must add the full pathname to bash to the file /etc/shells.  As
+noted in the answer to the previous question, many systems require
+this before you can make bash your login shell. 
+
+Most versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP. 
+
+A9)  What's the `POSIX 1003.2 standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX.  There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management.  Each area of standardization is
+assigned to a working group in the 1003 series. 
+
+The POSIX Shell and Utilities standard has been developed by IEEE
+Working Group 1003.2 (POSIX.2).  It concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs.  An initial version of the
+standard has been approved and published by the IEEE, and work is
+currently underway to update it. 
+
+Bash is concerned with the aspects of the shell's behavior
+defined by POSIX.2.  The shell command language has of course
+been standardized, including the basic flow control and program
+execution constructs, I/O redirection and pipelining, argument
+handling, variable expansion, and quoting. 
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'.  Other utilities appear in the sections of POSIX.2 not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'. 
+POSIX.2 also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing.  Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+The Open Group has made an older version of its Single Unix
+Specification (version 2), which is very similar to POSIX.2,
+available on the web at
+
+http://www.opengroup.org/onlinepubs/007908799/
+
+The Single Unix Specification, version 3, is available on the web at
+
+http://www.opengroup.org/onlinepubs/007904975/
+
+A10)  What is the bash `posix mode'?
+
+Although bash is an implementation of the POSIX.2 shell
+specification, there are areas where the bash default behavior
+differs from that spec.  The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely. 
+
+Posix mode is entered by starting bash with the --posix or
+'-o posix' option or executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file POSIX in the bash distribution.
+They are also listed in a section in the Bash Reference Manual
+(from which that file is generated).
+
+Section B:  The latest version
+
+B1) What's new in version 2.05b?
+
+The raison d'etre for bash-2.05b is to make a second intermediate
+release containing the first of the new features to be available
+in bash-3.0 and get feedback on those features before proceeding.
+The major new feature is multibyte character support in both Bash
+and Readline.
+
+Bash-2.05b contains the following new features (see the manual page for
+complete descriptions and the CHANGES and NEWS files in the bash-2.05b
+distribution):
+
+o support for multibyte characters has been added to both bash and readline
+
+o the DEBUG trap is now run *before* simple commands, ((...)) commands,
+  [[...]] conditional commands, and for ((...)) loops
+
+o the shell now performs arithmetic in the largest integer size the machine
+  supports (intmax_t)
+
+o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
+  and inserts the result into the expanded prompt
+
+o there is a new `here-string' redirection operator:  <<< word
+
+o when displaying variables, function attributes and definitions are shown
+  separately, allowing them to be re-used as input (attempting to re-use
+  the old output would result in syntax errors).
+
+o `read' has a new `-u fd' option to read from a specified file descriptor
+
+o the bash debugger in examples/bashdb has been modified to work with the
+  new DEBUG trap semantics, the command set has been made more gdb-like,
+  and the changes to $LINENO make debugging functions work better
+
+o the expansion of $LINENO inside a shell function is only relative to the
+  function start if the shell is interactive -- if the shell is running a
+  script, $LINENO expands to the line number in the script.  This is as
+  POSIX-2001 requires
+
+
+A short feature history dating from Bash-2.0:
+
+Bash-2.05a introduced the following new features:
+
+o The `printf' builtin has undergone major work
+
+o There is a new read-only `shopt' option: login_shell, which is set by
+  login shells and unset otherwise
+
+o New `\A' prompt string escape sequence; expanding to time in 24-hour
+  HH:MM format
+
+o New `-A group/-g' option to complete and compgen; goes group name
+  completion
+
+o New [+-]O invocation option to set and unset `shopt' options at startup
+
+o ksh-like `ERR' trap
+
+o `for' loops now allow empty word lists after the `in' reserved word
+
+o new `hard' and `soft' arguments for the `ulimit' builtin
+
+o Readline can be configured to place the user at the same point on the line
+  when retrieving commands from the history list
+
+o Readline can be configured to skip `hidden' files (filenames with a leading
+  `.' on Unix) when performing completion
+
+Bash-2.05 introduced the following new features:
+
+o This version has once again reverted to using locales and strcoll(3) when
+  processing pattern matching bracket expressions, as POSIX requires. 
+o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
+  per the new GNU coding standards.
+o The /dev/tcp and /dev/udp redirections now accept service names as well as
+  port numbers.
+o `complete' and `compgen' now take a `-o value' option, which controls some
+   of the aspects of that compspec.  Valid values are:
+
+        default - perform bash default completion if programmable
+                  completion produces no matches
+        dirnames - perform directory name completion if programmable
+                   completion produces no matches
+        filenames - tell readline that the compspec produces filenames,
+                    so it can do things like append slashes to
+                    directory names and suppress trailing spaces
+o A new loadable builtin, realpath, which canonicalizes and expands symlinks
+  in pathname arguments.
+o When `set' is called without options, it prints function defintions in a
+  way that allows them to be reused as input.  This affects `declare' and 
+  `declare -p' as well.  This only happens when the shell is not in POSIX
+   mode, since POSIX.2 forbids this behavior.
+
+Bash-2.04 introduced the following new features:
+
+o Programmable word completion with the new `complete' and `compgen' builtins;
+  examples are provided in examples/complete/complete-examples
+o `history' has a new `-d' option to delete a history entry
+o `bind' has a new `-x' option to bind key sequences to shell commands
+o The prompt expansion code has new `\j' and `\l' escape sequences
+o The `no_empty_cmd_completion' shell option, if enabled, inhibits
+  command completion when TAB is typed on an empty line
+o `help' has a new `-s' option to print a usage synopsis
+o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
+o New ksh93-style arithmetic for command:
+       for ((expr1 ; expr2; expr3 )); do list; done
+o `read' has new options: `-t', `-n', `-d', `-s'
+o The redirection code handles several filenames specially:  /dev/fd/N,
+  /dev/stdin, /dev/stdout, /dev/stderr
+o The redirection code now recognizes /dev/tcp/HOST/PORT and
+  /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
+  to the specified port on the specified host
+o The ${!prefix*} expansion has been implemented
+o A new FUNCNAME variable, which expands to the name of a currently-executing
+  function
+o The GROUPS variable is no longer readonly
+o A new shopt `xpg_echo' variable, to control the behavior of echo with
+  respect to backslash-escape sequences at runtime
+o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
+
+The version of Readline released with Bash-2.04, Readline-4.1, had several
+new features as well:
+
+o Parentheses matching is always compiled into readline, and controllable
+  with the new `blink-matching-paren' variable
+o The history-search-forward and history-search-backward functions now leave
+  point at the end of the line when the search string is empty, like
+  reverse-search-history, and forward-search-history
+o A new function for applications:  rl_on_new_line_with_prompt()
+o New variables for applications:  rl_already_prompted, and rl_gnu_readline_p
+
+
+Bash-2.03 had very few new features, in keeping with the convention
+that odd-numbered releases provide mainly bug fixes.  A number of new
+features were added to Readline, mostly at the request of the Cygnus
+folks.
+
+A new shopt option, `restricted_shell', so that startup files can test
+       whether or not the shell was started in restricted mode
+Filename generation is now performed on the words between ( and ) in
+       compound array assignments (this is really a bug fix)
+OLDPWD is now auto-exported, as POSIX.2 requires
+ENV and BASH_ENV are read-only variables in a restricted shell
+Bash may now be linked against an already-installed Readline library,
+       as long as the Readline library is version 4 or newer
+All shells begun with the `--login' option will source the login shell
+       startup files, even if the shell is not interactive
+
+There were lots of changes to the version of the Readline library released
+along with Bash-2.03.  For a complete list of the changes, read the file
+CHANGES in the Bash-2.03 distribution.
+
+Bash-2.02 contained the following new features:
+
+a new version of malloc (based on the old GNU malloc code in previous
+       bash versions) that is more page-oriented, more conservative
+       with memory usage, does not `orphan' large blocks when they
+       are freed, is usable on 64-bit machines, and has allocation
+       checking turned on unconditionally
+POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
+POSIX.2-style globbing equivalence classes
+POSIX.2-style globbing collating symbols
+the ksh [[...]] extended conditional command
+the ksh egrep-style extended pattern matching operators
+a new `printf' builtin
+the ksh-like $(<filename) command substitution, which is equivalent to
+       $(cat filename)
+new tilde prefixes that expand to directories from the directory stack
+new `**' arithmetic operator to do exponentiation
+case-insensitive globbing (filename expansion)
+menu completion a la tcsh
+`magic-space' history expansion function like tcsh
+the readline inputrc `language' has a new file inclusion directive ($include)
+
+Bash-2.01 contained only a few new features:
+
+new `GROUPS' builtin array variable containing the user's group list
+new bindable readline commands: history-and-alias-expand-line and
+       alias-expand-line
+
+Bash-2.0 contained extensive changes and new features from bash-1.14.7.
+Here's a short list:
+
+new `time' reserved word to time pipelines, shell builtins, and
+       shell functions
+one-dimensional arrays with a new compound assignment statement,
+        appropriate expansion constructs and modifications to some
+       of the builtins (read, declare, etc.) to use them
+new quoting syntaxes for ANSI-C string expansion and locale-specific
+       string translation
+new expansions to do substring extraction, pattern replacement, and
+       indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
+              MACHTYPE, BASH_VERSINFO
+special handling of many unused or redundant variables removed
+       (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
+history and aliases available in shell scripts
+new readline variables: enable-keypad, mark-directories, input-meta,
+       visible-stats, disable-completion, comment-begin
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:  
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+       (for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+B2) Are there any user-visible incompatibilities between bash-2.05b and
+    bash-1.14.7?
+
+There are a few incompatibilities between version 1.14.7 and version 2.05b.
+They are detailed in the file COMPAT in the bash distribution.  That file
+is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
+if if you find something that's not mentioned there.
+
+Section C:  Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4.2 shell.  The bash manual page explains these more
+completely.
+
+Things bash has that sh does not:
+       long invocation options
+       [+-]O invocation option
+       -l invocation option
+       `!' reserved word to invert pipeline return value
+       `time' reserved word to time pipelines and shell builtins
+       the `function' reserved word
+       the `select' compound command and reserved word
+       arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+       new $'...' and $"..." quoting
+       the $(...) form of command substitution
+       the $(<filename) form of command substitution, equivalent to
+               $(cat filename)
+       the ${#param} parameter value length operator
+       the ${!param} indirect parameter expansion operator
+       the ${!param*} prefix expansion operator
+       the ${param:offset[:length]} parameter substring operator
+       the ${param/pat[/string]} parameter pattern substitution operator
+       expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+       expansion of positional parameters beyond $9 with ${num}
+       variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
+                  TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
+                  LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
+                  ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
+                  HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
+                  PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
+                  SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
+                  auto_resume
+       DEBUG trap
+       ERR trap
+       variable arrays with new compound assignment syntax
+       redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
+       prompt string special char translation and variable expansion
+       auto-export of variables in initial environment
+       command search finds functions before builtins
+       bash return builtin will exit a file sourced with `.'
+       builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
+                 export -n/-f/-p/name=value, pwd -L/-P,
+                 read -e/-p/-a/-t/-n/-d/-s/-u,
+                 readonly -a/-f/name=value, trap -l, set +o,
+                 set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
+                 unset -f/-v, ulimit -m/-p/-u,
+                 type -a/-p/-t/-f/-P, suspend -f, kill -n,
+                 test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
+       bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+       bash restricted shell mode is more extensive
+       bash allows functions and variables with the same name
+       brace expansion
+       tilde expansion
+       arithmetic expansion with $((...)) and `let' builtin
+       the `[[...]]' extended conditional command
+       process substitution
+       aliases and alias/unalias builtins
+       local variables in functions and `local' builtin
+       readline and command-line editing with programmable completion
+       command history and history/fc builtins
+       csh-like history expansion
+       other new bash builtins: bind, command, compgen, complete, builtin,
+                                declare/typeset, dirs, enable, fc, help,
+                                history, logout, popd, pushd, disown, shopt,
+                                printf
+       exported functions
+       filename generation when using output redirection (command >a*)
+       POSIX.2-style globbing character classes
+       POSIX.2-style globbing equivalence classes
+       POSIX.2-style globbing collating symbols
+       egrep-like extended pattern matching operators
+       case-insensitive pattern matching and globbing
+       variable assignments preceding commands affect only that command,
+               even for builtins and functions
+       posix mode
+       redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
+               /dev/tcp/host/port, /dev/udp/host/port
+
+Things sh has that bash does not:
+       uses variable SHACCT to do shell accounting
+       includes `stop' builtin (bash can use alias stop='kill -s STOP')
+       `newgrp' builtin
+       turns on job control if called as `jsh'
+       $TIMEOUT (like bash $TMOUT)
+       `^' is a synonym for `|'
+       new SVR4.2 sh builtins: mldmode, priv
+
+Implementation differences:
+       redirection to/from compound commands causes sh to create a subshell
+       bash does not allow unbalanced quotes; sh silently inserts them at EOF
+       bash does not mess with signal 11
+       sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+       bash splits only the results of expansions on IFS, using POSIX.2
+               field splitting rules; sh splits all words on IFS
+       sh does not allow MAILCHECK to be unset (?)
+       sh does not allow traps on SIGALRM or SIGCHLD
+       bash allows multiple option arguments when invoked (e.g. -x -v);
+               sh allows only a single option argument (`sh -x -v' attempts
+               to open a file named `-v', and, on SunOS 4.1.4, dumps core.
+               On Solaris 2.4 and earlier versions, sh goes into an infinite
+               loop.)
+       sh exits a script if any builtin fails; bash exits only if one of
+               the POSIX.2 `special' builtins fails
+
+C2)  How does bash differ from the Korn shell, version ksh88?
+
+Things bash has or uses that ksh88 does not:
+       long invocation options
+       [-+]O invocation option
+       -l invocation option
+       `!' reserved word
+       arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+       arithmetic in largest machine-supported size (intmax_t)
+       posix mode and posix conformance
+       command hashing
+       tilde expansion for assignment statements that look like $PATH
+       process substitution with named pipes if /dev/fd is not available
+       the ${!param} indirect parameter expansion operator
+       the ${!param*} prefix expansion operator
+       the ${param:offset[:length]} parameter substring operator
+       the ${param/pat[/string]} parameter pattern substitution operator
+       variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
+                  TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
+                  HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
+                  IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
+                  PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
+                  GROUPS, FUNCNAME, histchars, auto_resume
+       prompt expansion with backslash escapes and command substitution
+       redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
+       more extensive and extensible editing and programmable completion
+       builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+                 exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
+                 jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
+                 read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
+                 set -o braceexpand/-o histexpand/-o interactive-comments/
+                 -o notify/-o physical/-o posix/-o hashall/-o onecmd/
+                 -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
+                 typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
+                 disown, printf, complete, compgen
+       `!' csh-style history expansion
+       POSIX.2-style globbing character classes
+       POSIX.2-style globbing equivalence classes
+       POSIX.2-style globbing collating symbols
+       egrep-like extended pattern matching operators
+       case-insensitive pattern matching and globbing
+       `**' arithmetic operator to do exponentiation
+       redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
+       arrays of unlimited size
+       TMOUT is default timeout for `read' and `select'
+
+Things ksh88 has or uses that bash does not:
+       tracked aliases (alias -t)
+       variables: ERRNO, FPATH, EDITOR, VISUAL
+       co-processes (|&, >&p, <&p)
+       weirdly-scoped functions
+       typeset +f to list all function names without definitions
+       text of command history kept in a file, not memory
+       builtins: alias -x, cd old new, fc -e -, newgrp, print,
+                 read -p/-s/var?prompt, set -A/-o gmacs/
+                 -o bgnice/-o markdirs/-o nolog/-o trackall/-o viraw/-s,
+                 typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
+       using environment to pass attributes of exported variables
+       arithmetic evaluation done on arguments to some builtins
+       reads .profile from $PWD when invoked as login shell
+
+Implementation differences:
+       ksh runs last command of a pipeline in parent shell context
+       bash has brace expansion by default (ksh88 compile-time option)
+       bash has fixed startup file for all interactive shells; ksh reads $ENV
+       bash has exported functions
+       bash command search finds functions before builtins
+       bash waits for all commands in pipeline to exit before returning status
+       emacs-mode editing has some slightly different key bindings
+
+C3)  Which new features in ksh-93 are not in bash, and which are?
+
+New things in ksh-93 not in bash-2.05b:
+       associative arrays
+       floating point arithmetic and variables
+       math library functions
+       ${!name[sub]} name of subscript for associative array
+       `.' is allowed in variable names to create a hierarchical namespace
+       more extensive compound assignment syntax
+       discipline functions
+       `sleep' and `getconf' builtins (bash has loadable versions)
+       typeset -n and `nameref' variables
+       KEYBD trap
+       variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
+                  .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
+       backreferences in pattern matching (\N)
+       `&' operator in pattern lists for matching
+       print -f (bash uses printf)
+       `fc' has been renamed to `hist'
+       `.' can execute shell functions
+       exit statuses between 0 and 255
+       set -o pipefail
+       `+=' variable assignment operator
+       FPATH and PATH mixing
+       getopts -a
+       -I invocation option
+       DEBUG trap now executed before each simple command, instead of after
+       printf %H, %P, %T, %Z modifiers, output base for %d
+       lexical scoping for local variables in `ksh' functions
+       no scoping for local variables in `POSIX' functions
+
+New things in ksh-93 present in bash-2.05b:
+       [n]<&word- and [n]>&word- redirections (combination dup and close)
+        for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
+        ?:, ++, --, `expr1 , expr2' arithmetic operators
+       expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
+                   ${!param*}
+       compound array assignment
+       the `!' reserved word
+       loadable builtins -- but ksh uses `builtin' while bash uses `enable'
+       `command', `builtin', `disown' builtins
+       new $'...' and $"..." quoting
+       FIGNORE (but bash uses GLOBIGNORE), HISTCMD
+       set -o notify/-C
+       changes to kill builtin
+       read -A (bash uses read -a)
+        read -t/-d
+       trap -p
+       exec -c/-a
+       `.' restores the positional parameters when it completes
+       POSIX.2 `test'
+       umask -S
+       unalias -a
+       command and arithmetic substitution performed on PS1, PS4, and ENV
+       command name completion
+       ENV processed only for interactive shells
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+    `which command' says it will?
+
+On many systems, `which' is actually a csh script that assumes
+you're running csh.  In tcsh, `which' and its cousin `where'
+are builtins.  On other Unix systems, `which' is a perl script
+that uses the PATH environment variable.
+
+The csh script version reads the csh startup files from your
+home directory and uses those to determine which `command' will
+be invoked.  Since bash doesn't use any of those startup files,
+there's a good chance that your bash environment differs from
+your csh environment.  The bash `type' builtin does everything
+`which' does, and will report correct results for the running
+shell.  If you're really wedded to the name `which', try adding
+the following function definition to your .bashrc:
+
+       which()
+       {
+               builtin type "$@"
+       }
+
+If you're moving from tcsh and would like to bring `where' along
+as well, use this function:
+
+       where()
+       {
+               builtin type -a "$@"
+       }
+
+D2) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least one unquoted
+comma if it is to be expanded.  Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code.  This affords the greatest degree of sh
+compatibility. 
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. 
+
+D3) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more cryptic,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+        Remove smallest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the suffix matched by the pattern deleted.
+
+        x=file.c
+        echo ${x%.c}.o
+        -->file.o
+
+${parameter%%word}
+
+        Remove largest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the suffix matched by the pattern deleted.
+
+        x=posix/src/std
+        echo ${x%%/*}
+        -->posix
+
+${parameter#word}
+        Remove smallest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the prefix matched by the pattern deleted.
+
+        x=$HOME/src/cmd
+        echo ${x#$HOME}
+        -->/src/cmd
+
+${parameter##word}
+        Remove largest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the prefix matched by the pattern deleted.
+
+        x=/one/two/three
+        echo ${x##*/}
+        -->three
+
+
+Given
+       a=/a/b/c/d
+       b=b.xxx
+
+       csh                     bash            result
+       ---                     ----            ------
+       $a:h                    ${a%/*}            /a/b/c
+       $a:t                    ${a##*/}           d
+       $b:r                    ${b%.*}            b
+       $b:e                    ${b##*.}           xxx
+
+
+D4) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does. 
+The details can be found in the documentation.  We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/misc/aliasconv.sh.  Here is
+how you use it:
+  
+Start csh in the normal way for you.  (e.g., `csh')
+  
+Pipe the output of `alias' through `aliasconv.sh', saving the
+results into `bash_aliases':
+  
+       alias | bash aliasconv.sh >bash_aliases
+  
+Edit `bash_aliases', carefully reading through any created
+functions.  You will need to change the names of some csh specific
+variables to the bash equivalents.  The script converts $cwd to
+$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
+to $PS1.  You may also have to add quotes to avoid unwanted
+expansion.
+
+For example, the csh alias:
+  
+       alias cd 'cd \!*; echo $cwd'
+  
+is converted to the bash function:
+
+       cd () { command cd "$@"; echo $PWD ; }
+
+The only thing that needs to be done is to quote $PWD:
+  
+       cd () { command cd "$@"; echo "$PWD" ; }
+  
+Merge the edited file into your ~/.bashrc.
+
+There is an additional, more ambitious, script in
+examples/misc/cshtobash that attempts to convert your entire csh
+environment to its bash equivalent.  This script can be run as
+simply `cshtobash' to convert your normal interactive
+environment, or as `cshtobash ~/.login' to convert your login
+environment. 
+
+D5) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+
+Use
+       command 2>&1 | command2
+
+The key is to remember that piping is performed before redirection, so
+file descriptor 1 points to the pipe when it is duplicated onto file
+descriptor 2.
+
+D6) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 and ksh-93 that do not have direct bash
+equivalents.  Most, however, can be emulated with very little trouble.
+
+ksh-88 feature         Bash equivalent
+--------------         ---------------
+compiled-in aliases    set up aliases in .bashrc; some ksh aliases are
+                       bash builtins (hash, history, type)
+coprocesses            named pipe pairs (one for read, one for write)
+typeset +f             declare -F
+cd, print, whence      function substitutes in examples/functions/kshenv
+autoloaded functions   examples/functions/autoload is the same as typeset -fu
+read var?prompt                read -p prompt var
+
+ksh-93 feature         Bash equivalent
+--------------         ---------------
+sleep, getconf         Bash has loadable versions in examples/loadables
+${.sh.version}         $BASH_VERSION
+print -f               printf
+hist                   alias hist=fc
+$HISTEDIT              $FCEDIT
+
+Section E:  How can I get bash to do certain things, and why does bash do
+           things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+   
+Here is the set of rules for processing test arguments.
+  
+    0 Args: False
+    1 Arg:  True iff argument is not null.
+    2 Args: If first arg is !, True iff second argument is null.
+           If first argument is unary, then true if unary test is true
+           Otherwise error.
+    3 Args: If second argument is a binary operator, do binary test of $1 $3
+           If first argument is !, negate two argument test of $2 $3
+           If first argument is `(' and third argument is `)', do the
+           one-argument test of the second argument.
+           Otherwise error.
+    4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+           Otherwise unspecified
+    5 or more Args: unspecified.  (Historical shells would use their
+    current algorithm).
+   
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+   
+As you can see, the test becomes (not (x or x)), which is false.
+
+E2) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appears in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal.  Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it. 
+For example, in:
+  
+      ps -aux | head
+  
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader.  In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE. 
+
+You can build a version of bash that will not report SIGPIPE errors
+by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
+config-top.h.
+
+E3) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+
+Readline, the line editing library that bash uses, does not know
+that the terminal escape sequences do not take up space on the
+screen.  The redisplay code assumes, unless told otherwise, that
+each character in the prompt is a `printable' character that
+takes up one character position on the screen. 
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space. 
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence. 
+
+E4) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes.  It affects all commands run in pipelines, not just
+simple calls to `read'.  For example, piping a command's output
+into a `while' loop that repeatedly calls `read' will result in
+the same behavior.
+
+Each element of a pipeline runs in a separate process, a child of
+the shell running the pipeline.  A subprocess cannot affect its
+parent's environment.  When the `read' command sets the variable
+to the input, that variable is set only in the subshell, not the
+parent shell.  When the subshell exits, the value of the variable
+is lost. 
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output of
+a specified command.  The output can then be assigned to a
+variable:
+
+       grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+       ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments.  If you need to do this, you can either use the
+command substitution above to read the output into a variable
+and chop up the variable using the bash pattern removal
+expansion operators or use some variant of the following
+approach.
+
+Say /usr/local/bin/ipaddr is the following shell script:
+
+#! /bin/sh
+host `hostname` | awk '/address/ {print $NF}'
+
+Instead of using
+
+       /usr/local/bin/ipaddr | read A B C D
+
+to break the local machine's IP address into separate octets, use
+
+       OIFS="$IFS"
+       IFS=.
+       set -- $(/usr/local/bin/ipaddr)
+       IFS="$OIFS"
+       A="$1" B="$2" C="$3" D="$4"
+
+Beware, however, that this will change the shell's positional
+parameters.  If you need them, you should save them before doing
+this.
+
+This is the general approach -- in most cases you will not need to
+set $IFS to a different value.
+
+Some other user-supplied alternatives include:
+
+read A B C D << HERE
+    $(IFS=.; echo $(/usr/local/bin/ipaddr))
+HERE
+
+and, where process substitution is available,
+
+read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
+
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modeled after the 9th Edition
+Research Unix version of `echo'.  It does not interpret
+backslash-escaped characters in its argument strings by default;
+it requires the use of the -e option to enable the
+interpretation.  The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them. 
+
+There is a configuration option that will make bash behave like
+the System V echo and interpret things like `\t' by default.  Run
+configure with the --enable-xpg-echo-default option to turn this
+on.  Be aware that this will cause some of the tests run when you
+type `make tests' to fail.
+
+There is a shell option, `xpg_echo', settable with `shopt', that will
+change the behavior of echo at runtime.  Enabling this option turns
+on expansion of backslash-escape sequences.
+
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+
+This is a consequence of how job control works on Unix.  The only
+thing that can be suspended is the process group.  This is a single
+command or pipeline of commands that the shell forks and executes.
+
+When you run a while or for loop, the only thing that the shell forks
+and executes are any commands in the while loop test and commands in
+the loop bodies.  These, therefore, are the only things that can be
+suspended when you type ^Z.
+
+If you want to be able to stop the entire loop, you need to put it
+within parentheses, which will force the loop into a subshell that
+may be stopped (and subsequently restarted) as a single unit.
+
+E7) What about empty for loops in Makefiles?
+
+It's fairly common to see constructs like this in automatically-generated
+Makefiles:
+
+SUBDIRS = @SUBDIRS@
+
+       ...
+
+subdirs-clean:
+       for d in ${SUBDIRS}; do \
+               ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+       done
+
+When SUBDIRS is empty, this results in a command like this being passed to
+bash:
+
+       for d in ; do
+               ( cd $d && ${MAKE} ${MFLAGS} clean )
+       done
+
+In versions of bash before bash-2.05a, this was a syntax error.  If the
+reserved word `in' was present, a word must follow it before the semicolon
+or newline.  The language in the manual page referring to the list of words
+being empty referred to the list after it is expanded.  These versions of
+bash required that there be at least one word following the `in' when the
+construct was parsed.
+
+The idiomatic Makefile solution is something like:
+
+SUBDIRS = @SUBDIRS@
+
+subdirs-clean:
+       subdirs=$SUBDIRS ; for d in $$subdirs; do \
+               ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+       done
+
+The latest drafts of the updated POSIX standard have changed this:  the
+word list is no longer required.  Bash versions 2.05a and later accept
+the new syntax.
+
+E8) Why does the arithmetic evaluation code complain about `08'?
+
+The bash arithmetic evaluation code (used for `let', $(()), (()), and in
+other places), interprets a leading `0' in numeric constants as denoting
+an octal number, and a leading `0x' as denoting hexadecimal.  This is
+in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
+arithmetic constants should be handled as signed long integers as defined
+by the ANSI/ISO C standard.
+
+The POSIX.2 interpretation committee has confirmed this:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
+
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+    with every letter except `z'?
+
+Bash-2.03, Bash-2.05 and later versions honor the current locale setting
+when processing ranges within pattern matching bracket expressions ([A-Z]). 
+This is what POSIX.2 and SUSv3/XPG6 specify. 
+
+The behavior of the matcher in bash-2.05 and later versions depends on the
+current LC_COLLATE setting.  Setting this variable to `C' or `POSIX' will
+result in the traditional behavior ([A-Z] matches all uppercase ASCII
+characters).  Many other locales, including the en_US locale (the default
+on many US versions of Linux) collate the upper and lower case letters like
+this:
+
+       AaBb...Zz
+
+which means that [A-Z] matches every letter except `z'.  Others collate like
+
+       aAbBcC...zZ
+
+which means that [A-Z] matches every letter except `a'.
+
+The portable way to specify upper case letters is [:upper:] instead of
+A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+present, locale(1).  If you have locale(1), you can use it to find
+your current locale information even if you do not have any of the
+LC_ variables set.
+
+My advice is to put
+
+       export LC_COLLATE=C
+
+into /etc/profile and inspect any shell scripts run from cron for
+constructs like [A-Z].  This will prevent things like
+
+       rm [A-Z]*
+
+from removing every file in the current directory except those beginning
+with `z' and still allow individual users to change the collation order.
+Users may put the above command into their own profiles as well, of course.
+
+E10) Why does `cd //' leave $PWD as `//'?
+
+POSIX.2, in its description of `cd', says that *three* or more leading
+slashes may be replaced with a single slash when canonicalizing the
+current working directory.
+
+This is, I presume, for historical compatibility.  Certain versions of
+Unix, and early network file systems, used paths of the form
+//hostname/path to access `path' on server `hostname'.
+
+E11) If I resize my xterm while another program is running, why doesn't bash
+     notice the change?
+
+This is another issue that deals with job control.
+
+The kernel maintains a notion of a current terminal process group.  Members
+of this process group (processes whose process group ID is equal to the
+current terminal process group ID) receive terminal-generated signals like
+SIGWINCH.  (For more details, see the JOB CONTROL section of the bash
+man page.)
+
+If a terminal is resized, the kernel sends SIGWINCH to each member of
+the terminal's current process group (the `foreground' process group).
+
+When bash is running with job control enabled, each pipeline (which may be
+a single command) is run in its own process group, different from bash's
+process group.  This foreground process group receives the SIGWINCH; bash
+does not.  Bash has no way of knowing that the terminal has been resized.
+
+There is a `checkwinsize' option, settable with the `shopt' builtin, that
+will cause bash to check the window size and adjust its idea of the
+terminal's dimensions each time a process stops or exits and returns control
+of the terminal to bash.  Enable it with `shopt -s checkwinsize'.
+
+Section F:  Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input.  When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves.  As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry.  For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution. 
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+If you must use cmdtool, you can use the termcap description in
+examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
+description contained in that file, i.e.
+
+TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
+
+Then export TERMCAP and start a new cmdtool window from that shell.
+The bash command-line editing should behave better in the new
+cmdtool.  If this works, you can put the assignment to TERMCAP
+in your bashrc file.
+
+F2) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and structures from files in /usr/include. 
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when configuring and building bash.  This will ensure that you
+use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
+link with libc before libucb. 
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+F3) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server.  When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null. 
+So far, so good. 
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns.  The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory. 
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed.  You can
+run configure with the `--without-gnu-malloc' option to use
+the C library malloc and avoid the problem.
+
+F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2.  You can change this
+character to whatever you want using `stty'.  For example, to
+change the line kill character to control-u, type
+
+       stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+F5) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+
+The actual command in question is something like
+
+       < file ( command )
+
+According to the grammar given in the POSIX.2 standard, this construct
+is, in fact, a syntax error.  Redirections may only precede `simple
+commands'.  A subshell construct such as the above is one of the shell's
+`compound commands'.  A redirection may only follow a compound command.
+
+This affects the mechanical transformation of commands that use `cat'
+to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
+comp.unix.shell).  While most commands of the form
+
+       cat file | command
+
+can be converted to `< file command', shell control structures such as
+loops and subshells require `command < file'.
+
+The file CWRU/sh-redir-hack in the bash-2.05a distribution is an
+(unofficial) patch to parse.y that will modify the grammar to
+support this construct.  It will not apply with `patch'; you must
+modify parse.y by hand.  Note that if you apply this, you must
+recompile with -DREDIRECTION_HACK.  This introduces a large
+number of reduce/reduce conflicts into the shell grammar. 
+
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+
+The short answer is that Red Hat screwed up.
+
+The long answer is that they shipped an /etc/inputrc that only works
+for emacs mode editing, and then screwed all the vi users by setting
+INPUTRC to /etc/inputrc in /etc/profile.
+
+The short fix is to do one of the following: remove or rename
+/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
+but make sure you export it if you do), remove the assignment to
+INPUTRC from /etc/profile, add
+
+        set keymap emacs
+
+to the beginning of /etc/inputrc, or bracket the key bindings in
+/etc/inputrc with these lines
+
+       $if mode=emacs
+               [...]
+       $endif
+
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+    HP/UX 11.x?
+
+HP/UX's support for long double is imperfect at best.
+
+GCC will support it without problems, but the HP C library functions
+like strtold(3) and printf(3) don't actually work with long doubles.
+HP implemented a `long_double' type as a 4-element array of 32-bit
+ints, and that is what the library functions use.  The ANSI C
+`long double' type is a 128-bit floating point scalar.
+
+The easiest fix, until HP fixes things up, is to edit the generated
+config.h and #undef the HAVE_LONG_DOUBLE line.  After doing that,
+the compilation should complete successfully.
+
+Section G:  How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits.  For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eighth bit of characters alone when processing
+keyboard input.  Use `stty' to do this:
+
+       stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+       stty pass8
+
+You may also need
+
+       stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters.  You use readline variables to do
+this.  These variables can be set in your .inputrc or using the bash
+`bind' builtin.  Here's an example using `bind':
+
+       bash$ bind 'set convert-meta off'
+       bash$ bind 'set meta-flag on'
+       bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+G2) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+
+This is why the `command' and `builtin' builtins exist.  The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name.  The
+`builtin' builtin executes the builtin command given as its first
+argument directly. 
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+       cd()
+       {
+               builtin cd "$@" && xtitle "$HOST: $PWD"
+       }
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient. 
+
+G3) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+
+Versions of Bash newer than Bash-2.0 support this directly.  You can use 
+
+       ${!var}
+
+For example, the following sequence of commands will echo `z':
+
+       var1=var2
+       var2=z
+       echo ${!var1}
+
+For sh compatibility, use the `eval' builtin.  The important
+thing to remember is that `eval' expands the arguments you give
+it again, so you need to quote the parts of the arguments that
+you want `eval' to act on. 
+
+For example, this expression prints the value of the last positional
+parameter:
+
+       eval echo \"\$\{$#\}\"
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed.  In versions of bash later than bash-2.0,
+
+       echo ${!#}
+
+does the same thing.
+
+This is not the same thing as ksh93 `nameref' variables, though the syntax
+is similar.  I may add namerefs in a future bash version.
+
+G4) How can I make the bash `time' reserved word print timing output that
+     looks like the output from my system's /usr/bin/time?
+
+The bash command timing code looks for a variable `TIMEFORMAT' and
+uses its value as a format string to decide how to display the
+timing statistics.
+
+The value of TIMEFORMAT is a string with `%' escapes expanded in a
+fashion similar in spirit to printf(3).  The manual page explains
+the meanings of the escape sequences in the format string.
+
+If TIMEFORMAT is not set, bash acts as if the following assignment had
+been performed:
+
+       TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
+The POSIX.2 default time format (used by `time -p command') is
+
+       TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
+
+The BSD /usr/bin/time format can be emulated with:
+
+       TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
+
+The System V /usr/bin/time format can be emulated with:
+
+       TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
+
+The ksh format can be emulated with:
+
+       TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
+
+G5) How do I get the current directory into my prompt?
+
+Bash provides a number of backslash-escape sequences which are expanded
+when the prompt string (PS1 or PS2) is displayed.  The full list is in
+the manual page.
+
+The \w expansion gives the full pathname of the current directory, with
+a tilde (`~') substituted for the current value of $HOME.  The \W
+expansion gives the basename of the current directory.  To put the full
+pathname of the current directory into the path without any tilde
+subsitution, use $PWD.  Here are some examples:
+
+       PS1='\w$ '      # current directory with tilde
+       PS1='\W$ '      # basename of current directory
+       PS1='$PWD$ '    # full pathname of current directory
+
+The single quotes are important in the final example to prevent $PWD from
+being expanded when the assignment to PS1 is performed.
+
+G6) How can I rename "*.foo" to "*.bar"?
+
+Use the pattern removal functionality described in D3.  The following `for'
+loop will do the trick:
+
+       for f in *.foo; do
+               mv $f ${f%foo}bar
+       done
+
+G7) How can I translate a filename from uppercase to lowercase?
+
+The script examples/functions/lowercase, originally written by John DuBois,
+will do the trick.  The converse is left as an exercise.
+
+G8) How can I write a filename expansion (globbing) pattern that will match
+    all files in the current directory except "." and ".."?
+
+You must have set the `extglob' shell option using `shopt -s extglob' to use
+this:
+
+       echo .!(.|) *
+
+A solution that works without extended globbing is given in the Unix Shell
+FAQ, posted periodically to comp.unix.shell.
+
+Section H:  Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+
+Use the `bashbug' script to report bugs.  It is built and
+installed at the same time as bash.  It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment. 
+
+`bashbug' sends its reports to bug-bash@gnu.org, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. 
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug.  Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@gnu.org.
+
+H2) What kind of bash documentation is there?
+
+First, look in the doc directory in the bash distribution.  It should
+contain at least the following files:
+
+bash.1         an extensive, thorough Unix-style manual page
+builtins.1     a manual page covering just bash builtin commands
+bashref.texi   a reference manual in GNU tex`info format
+bashref.info   an info version of the reference manual
+FAQ            this file
+article.ms     text of an article written for The Linux Journal
+readline.3     a man page describing readline
+
+Postscript, HTML, and ASCII files created from the above source are
+available in the documentation distribution.
+
+There is additional documentation available for anonymous FTP from host
+ftp.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham and Bill Rosenblatt have written a book on bash, published
+by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
+Shell book.  The title is ``Learning the Bash Shell'', and the ISBN number
+is 1-56592-147-X.  Look for it in fine bookstores near you.  This book
+covers bash-1.14, but has an appendix describing some of the new features
+in bash-2.0.  
+
+A second edition of this book is available, published in January, 1998.
+The ISBN number is 1-56592-347-2.  Look for it in the same fine bookstores
+or on the web.
+
+The GNU Bash Reference Manual has been published as a printed book by
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003).  It covers
+bash-2.0 and is available from most online bookstores (see
+http://www.network-theory.co.uk/bash/manual/ for details).  The publisher
+will donate $1 to the Free Software Foundation for each copy sold. 
+
+H3) What's coming in future versions?
+
+These are features I hope to include in a future version of bash.
+
+a better bash debugger (a minimally-tested version is included with bash-2.05b)
+associative arrays
+co-processes, but with a new-style syntax that looks like function declaration
+
+H4) What's on the bash `wish list' for future versions?
+
+These are features that may or may not appear in a future version of bash.
+
+breaking some of the shell functionality into embeddable libraries
+a module system like zsh's, using dynamic loading like builtins
+better internationalization using GNU `gettext'
+date-stamped command history
+a bash programmer's guide with a chapter on creating loadable builtins
+a better loadable interface to perl with access to the shell builtins and
+       variables (contributions gratefully accepted)
+ksh93-like `nameref' variables
+ksh93-like `+=' variable assignment operator
+ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
+       associated disipline functions
+Some of the new ksh93 pattern matching operators, like backreferencing
+
+H5) When will the next release appear?
+
+The next version will appear sometime in 2002.  Never make predictions. 
+
+
+This document is Copyright 1995-2003 by Chester Ramey.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.
index ec414627f0f832225cc453e51840dc90e534b5a6..3f00de9f8db65dd8bbd9c56dec1f31079dcddcb5 100644 (file)
@@ -4604,7 +4604,8 @@ the exit status is greater than zero.
 Shell builtin commands return a status of 0 (\fItrue\fP) if
 successful, and non-zero (\fIfalse\fP) if an error occurs
 while they execute. 
-All builtins return an exit status of 2 to indicate incorrect usage.
+All builtins return an exit status of 2 to indicate incorrect usage,
+generally invalid options or missing arguments.
 .PP
 \fBBash\fP itself returns the exit status of the last command
 executed, unless a syntax error occurs, in which case it exits
index eca3c26b1363819117e4e2dc6883f02c2bc7056c..0bfad7661859eb6a2912252b3e91f139f136c322 100644 (file)
@@ -3038,7 +3038,8 @@ constructs (@pxref{Lists}).
 All of the Bash builtins return an exit status of zero if they succeed
 and a non-zero status on failure, so they may be used by the
 conditional and list constructs.
-All builtins return an exit status of 2 to indicate incorrect usage.
+All builtins return an exit status of 2 to indicate incorrect usage,
+generally invalid options or missing arguments.
 
 @node Signals
 @subsection Signals
diff --git a/examples/loadables/Makefile.in.save b/examples/loadables/Makefile.in.save
new file mode 100644 (file)
index 0000000..f6208f5
--- /dev/null
@@ -0,0 +1,238 @@
+#
+# Simple makefile for the sample loadable builtins
+#
+# Copyright (C) 1996 Free Software Foundation, Inc.     
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
+
+# Include some boilerplate Gnu makefile definitions.
+prefix = @prefix@
+
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+libdir = @libdir@
+infodir = @infodir@
+includedir = @includedir@
+
+topdir = @top_srcdir@
+BUILD_DIR = @BUILD_DIR@
+srcdir = @srcdir@
+VPATH = .:@srcdir@
+
+@SET_MAKE@
+CC = @CC@
+RM = rm -f
+
+SHELL = @MAKE_SHELL@
+
+host_os = @host_os@
+host_cpu = @host_cpu@
+host_vendor = @host_vendor@
+
+CFLAGS = @CFLAGS@
+LOCAL_CFLAGS = @LOCAL_CFLAGS@
+DEFS = @DEFS@
+LOCAL_DEFS = @LOCAL_DEFS@
+
+CPPFLAGS = @CPPFLAGS@
+
+BASHINCDIR = ${topdir}/include
+
+LIBBUILD = ${BUILD_DIR}/lib
+
+INTL_LIBSRC = ${topdir}/lib/intl
+INTL_BUILDDIR = ${LIBBUILD}/intl
+INTL_INC = @INTL_INC@
+LIBINTL_H = @LIBINTL_H@
+
+CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(LOCAL_CFLAGS) $(CFLAGS)
+
+#
+# These values are generated for configure by ${topdir}/support/shobj-conf.
+# If your system is not supported by that script, but includes facilities for
+# dynamic loading of shared objects, please update the script and send the
+# changes to bash-maintainers@gnu.org.
+#
+SHOBJ_CC = @SHOBJ_CC@
+SHOBJ_CFLAGS = @SHOBJ_CFLAGS@
+SHOBJ_LD = @SHOBJ_LD@
+SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@
+SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@
+SHOBJ_LIBS = @SHOBJ_LIBS@
+SHOBJ_STATUS = @SHOBJ_STATUS@
+
+INC = -I. -I.. -I$(topdir) -I$(topdir)/lib -I$(topdir)/builtins \
+      -I$(BASHINCDIR) -I$(BUILD_DIR) -I$(LIBBUILD) \
+      -I$(BUILD_DIR)/builtins $(INTL_INC)
+
+.c.o:
+       $(SHOBJ_CC) $(SHOBJ_CFLAGS) $(CCFLAGS) $(INC) -c -o $@ $<
+
+
+ALLPROG = print truefalse sleep pushd finfo logname basename dirname \
+         tty pathchk tee head mkdir rmdir printenv id whoami \
+         uname sync push ln unlink cut realpath getconf strftime
+OTHERPROG = necho hello cat
+
+all:   $(SHOBJ_STATUS)
+
+supported:     $(ALLPROG)
+others:                $(OTHERPROG)
+
+unsupported:
+       @echo "Your system (${host_os}) is not supported by the"
+       @echo "${topdir}/support/shobj-conf script."
+       @echo "If your operating system provides facilities for dynamic"
+       @echo "loading of shared objects using the dlopen(3) interface,"
+       @echo "please update the script and re-run configure.
+       @echo "Please send the changes you made to bash-maintainers@gnu.org"
+       @echo "for inclusion in future bash releases."
+
+everything: supported others
+
+print: print.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ print.o $(SHOBJ_LIBS)
+
+necho: necho.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ necho.o $(SHOBJ_LIBS)
+
+getconf: getconf.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ getconf.o $(SHOBJ_LIBS)
+
+hello: hello.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ hello.o $(SHOBJ_LIBS)
+
+truefalse: truefalse.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ truefalse.o $(SHOBJ_LIBS)
+
+sleep: sleep.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ sleep.o $(SHOBJ_LIBS)
+
+finfo: finfo.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ finfo.o $(SHOBJ_LIBS)
+
+cat:   cat.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cat.o $(SHOBJ_LIBS)
+
+logname:       logname.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ logname.o $(SHOBJ_LIBS)
+
+basename:      basename.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ basename.o $(SHOBJ_LIBS)
+
+dirname:       dirname.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ dirname.o $(SHOBJ_LIBS)
+
+tty:   tty.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ tty.o $(SHOBJ_LIBS)
+
+pathchk:       pathchk.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ pathchk.o $(SHOBJ_LIBS)
+
+tee:   tee.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ tee.o $(SHOBJ_LIBS)
+
+mkdir: mkdir.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ mkdir.o $(SHOBJ_LIBS)
+
+rmdir: rmdir.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ rmdir.o $(SHOBJ_LIBS)
+
+head:  head.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ head.o $(SHOBJ_LIBS)
+
+printenv:      printenv.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ printenv.o $(SHOBJ_LIBS)
+
+id:    id.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ id.o $(SHOBJ_LIBS)
+
+whoami:        whoami.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ whoami.o $(SHOBJ_LIBS)
+
+uname: uname.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ uname.o $(SHOBJ_LIBS)
+
+sync:  sync.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ sync.o $(SHOBJ_LIBS)
+
+push:  push.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ push.o $(SHOBJ_LIBS)
+
+ln:    ln.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ ln.o $(SHOBJ_LIBS)
+
+unlink:        unlink.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ unlink.o $(SHOBJ_LIBS)
+
+cut:   cut.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ cut.o $(SHOBJ_LIBS)
+
+realpath:      realpath.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ realpath.o $(SHOBJ_LIBS)
+
+strftime:      strftime.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ strftime.o $(SHOBJ_LIBS)
+
+# pushd is a special case.  We use the same source that the builtin version
+# uses, with special compilation options.
+#
+pushd.c:       ${topdir}/builtins/pushd.def
+       $(RM) $@
+       ${BUILD_DIR}/builtins/mkbuiltins -D ${topdir}/builtins ${topdir}/builtins/pushd.def
+
+pushd.o:       pushd.c
+       $(RM) $@
+       $(SHOBJ_CC) -DHAVE_CONFIG_H -DPUSHD_AND_POPD -DLOADABLE_BUILTIN $(SHOBJ_CFLAGS) $(CFLAGS) $(CPPFLAGS) $(INC) -c -o $@ $<
+
+pushd: pushd.o
+       $(SHOBJ_LD) $(SHOBJ_LDFLAGS) $(SHOBJ_XLDFLAGS) -o $@ pushd.o $(SHOBJ_LIBS)
+
+clean:
+       $(RM) $(ALLPROG) $(OTHERPROG) *.o
+       -( cd perl && ${MAKE} ${MFLAGS} $@ )
+
+mostlyclean:   clean
+       -( cd perl && ${MAKE} ${MFLAGS} $@ )
+
+distclean maintainer-clean: clean
+       $(RM) Makefile pushd.c
+       -( cd perl && ${MAKE} ${MFLAGS} $@ )
+
+print.o: print.c
+truefalse.o: truefalse.c
+sleep.o: sleep.c
+finfo.o: finfo.c
+logname.o: logname.c
+basename.o: basename.c
+dirname.o: dirname.c
+tty.o: tty.c
+pathchk.o: pathchk.c
+tee.o: tee.c
+head.o: head.c
+rmdir.o: rmdir.c
+necho.o: necho.c
+getconf.o: getconf.c
+hello.o: hello.c
+cat.o: cat.c
+printenv.o: printenv.c
+id.o: id.c
+whoami.o: whoami.c
+uname.o: uname.c
+sync.o: sync.c
+push.o: push.c
+mkdir.o: mkdir.c
+realpath.o: realpath.c
+strftime.o: strftime.c
index f9a755de82a29ebb199b1295ae4ea80ae2ff5ac0..32182ef03f61227fc273b4746cee7e7ba805af21 100644 (file)
@@ -286,6 +286,8 @@ int line_number_for_err_trap;
 int funcnest = 0;
 int funcnest_max = 0;          /* bash-4.2 */
 
+volatile int from_return_trap = 0;
+
 int lastpipe_opt = 0;
 
 struct fd_bitmap *current_fds_to_close = (struct fd_bitmap *)NULL;
@@ -4502,6 +4504,8 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
 
   fc = tc;
 
+  from_return_trap = 0;
+
   return_catch_flag++;
   return_val = setjmp_nosigs (return_catch);
 
@@ -4510,7 +4514,8 @@ execute_function (var, words, flags, fds_to_close, async, subshell)
       result = return_catch_value;
       /* Run the RETURN trap in the function's context. */
       save_current = currently_executing_command;
-      run_return_trap ();
+      if (from_return_trap == 0)
+       run_return_trap ();
       currently_executing_command = save_current;
     }
   else
diff --git a/execute_cmd.c~ b/execute_cmd.c~
new file mode 100644 (file)
index 0000000..668a09d
--- /dev/null
@@ -0,0 +1,5453 @@
+/* execute_cmd.c -- Execute a COMMAND structure. */
+
+/* Copyright (C) 1987-2013 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "config.h"
+
+#if !defined (__GNUC__) && !defined (HAVE_ALLOCA_H) && defined (_AIX)
+  #pragma alloca
+#endif /* _AIX && RISC6000 && !__GNUC__ */
+
+#include <stdio.h>
+#include "chartypes.h"
+#include "bashtypes.h"
+#if !defined (_MINIX) && defined (HAVE_SYS_FILE_H)
+#  include <sys/file.h>
+#endif
+#include "filecntl.h"
+#include "posixstat.h"
+#include <signal.h>
+#if defined (HAVE_SYS_PARAM_H)
+#  include <sys/param.h>
+#endif
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "posixtime.h"
+
+#if defined (HAVE_SYS_RESOURCE_H) && !defined (RLIMTYPE)
+#  include <sys/resource.h>
+#endif
+
+#if defined (HAVE_SYS_TIMES_H) && defined (HAVE_TIMES)
+#  include <sys/times.h>
+#endif
+
+#include <errno.h>
+
+#if !defined (errno)
+extern int errno;
+#endif
+
+#define NEED_FPURGE_DECL
+
+#include "bashansi.h"
+#include "bashintl.h"
+
+#include "memalloc.h"
+#include "shell.h"
+#include <y.tab.h>     /* use <...> so we pick it up from the build directory */
+#include "flags.h"
+#include "builtins.h"
+#include "hashlib.h"
+#include "jobs.h"
+#include "execute_cmd.h"
+#include "findcmd.h"
+#include "redir.h"
+#include "trap.h"
+#include "pathexp.h"
+#include "hashcmd.h"
+
+#if defined (COND_COMMAND)
+#  include "test.h"
+#endif
+
+#include "builtins/common.h"
+#include "builtins/builtext.h" /* list of builtins */
+
+#include <glob/strmatch.h>
+#include <tilde/tilde.h>
+
+#if defined (BUFFERED_INPUT)
+#  include "input.h"
+#endif
+
+#if defined (ALIAS)
+#  include "alias.h"
+#endif
+
+#if defined (HISTORY)
+#  include "bashhist.h"
+#endif
+
+extern int dollar_dollar_pid;
+extern int posixly_correct;
+extern int expand_aliases;
+extern int autocd;
+extern int breaking, continuing, loop_level;
+extern int parse_and_execute_level, running_trap, sourcelevel;
+extern int command_string_index, line_number;
+extern int dot_found_in_search;
+extern int already_making_children;
+extern int tempenv_assign_error;
+extern char *the_printed_command, *shell_name;
+extern pid_t last_command_subst_pid;
+extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
+extern char **subshell_argv, **subshell_envp;
+extern int subshell_argc;
+extern time_t shell_start_time;
+#if 0
+extern char *glob_argv_flags;
+#endif
+
+extern int job_control;        /* XXX */
+
+extern int close __P((int));
+
+/* Static functions defined and used in this file. */
+static void close_pipes __P((int, int));
+static void do_piping __P((int, int));
+static void bind_lastarg __P((char *));
+static int shell_control_structure __P((enum command_type));
+static void cleanup_redirects __P((REDIRECT *));
+
+#if defined (JOB_CONTROL)
+static int restore_signal_mask __P((sigset_t *));
+#endif
+
+static void async_redirect_stdin __P((void));
+
+static int builtin_status __P((int));
+
+static int execute_for_command __P((FOR_COM *));
+#if defined (SELECT_COMMAND)
+static int displen __P((const char *));
+static int print_index_and_element __P((int, int, WORD_LIST *));
+static void indent __P((int, int));
+static void print_select_list __P((WORD_LIST *, int, int, int));
+static char *select_query __P((WORD_LIST *, int, char *, int));
+static int execute_select_command __P((SELECT_COM *));
+#endif
+#if defined (DPAREN_ARITHMETIC)
+static int execute_arith_command __P((ARITH_COM *));
+#endif
+#if defined (COND_COMMAND)
+static int execute_cond_node __P((COND_COM *));
+static int execute_cond_command __P((COND_COM *));
+#endif
+#if defined (COMMAND_TIMING)
+static int mkfmt __P((char *, int, int, time_t, int));
+static void print_formatted_time __P((FILE *, char *,
+                                     time_t, int, time_t, int,
+                                     time_t, int, int));
+static int time_command __P((COMMAND *, int, int, int, struct fd_bitmap *));
+#endif
+#if defined (ARITH_FOR_COMMAND)
+static intmax_t eval_arith_for_expr __P((WORD_LIST *, int *));
+static int execute_arith_for_command __P((ARITH_FOR_COM *));
+#endif
+static int execute_case_command __P((CASE_COM *));
+static int execute_while_command __P((WHILE_COM *));
+static int execute_until_command __P((WHILE_COM *));
+static int execute_while_or_until __P((WHILE_COM *, int));
+static int execute_if_command __P((IF_COM *));
+static int execute_null_command __P((REDIRECT *, int, int, int));
+static void fix_assignment_words __P((WORD_LIST *));
+static int execute_simple_command __P((SIMPLE_COM *, int, int, int, struct fd_bitmap *));
+static int execute_builtin __P((sh_builtin_func_t *, WORD_LIST *, int, int));
+static int execute_function __P((SHELL_VAR *, WORD_LIST *, int, struct fd_bitmap *, int, int));
+static int execute_builtin_or_function __P((WORD_LIST *, sh_builtin_func_t *,
+                                           SHELL_VAR *,
+                                           REDIRECT *, struct fd_bitmap *, int));
+static void execute_subshell_builtin_or_function __P((WORD_LIST *, REDIRECT *,
+                                                     sh_builtin_func_t *,
+                                                     SHELL_VAR *,
+                                                     int, int, int,
+                                                     struct fd_bitmap *,
+                                                     int));
+static int execute_disk_command __P((WORD_LIST *, REDIRECT *, char *,
+                                     int, int, int, struct fd_bitmap *, int));
+
+static char *getinterp __P((char *, int, int *));
+static void initialize_subshell __P((void));
+static int execute_in_subshell __P((COMMAND *, int, int, int, struct fd_bitmap *));
+#if defined (COPROCESS_SUPPORT)
+static int execute_coproc __P((COMMAND *, int, int, struct fd_bitmap *));
+#endif
+
+static int execute_pipeline __P((COMMAND *, int, int, int, struct fd_bitmap *));
+
+static int execute_connection __P((COMMAND *, int, int, int, struct fd_bitmap *));
+
+static int execute_intern_function __P((WORD_DESC *, FUNCTION_DEF *));
+
+/* Set to 1 if fd 0 was the subject of redirection to a subshell.  Global
+   so that reader_loop can set it to zero before executing a command. */
+int stdin_redir;
+
+/* The name of the command that is currently being executed.
+   `test' needs this, for example. */
+char *this_command_name;
+
+/* The printed representation of the currently-executing command (same as
+   the_printed_command), except when a trap is being executed.  Useful for
+   a debugger to know where exactly the program is currently executing. */
+char *the_printed_command_except_trap;
+
+/* For catching RETURN in a function. */
+int return_catch_flag;
+int return_catch_value;
+procenv_t return_catch;
+
+/* The value returned by the last synchronous command. */
+int last_command_exit_value;
+
+/* Whether or not the last command (corresponding to last_command_exit_value)
+   was terminated by a signal, and, if so, which one. */
+int last_command_exit_signal;
+
+/* Are we currently ignoring the -e option for the duration of a builtin's
+   execution? */
+int builtin_ignoring_errexit = 0;
+
+/* The list of redirections to perform which will undo the redirections
+   that I made in the shell. */
+REDIRECT *redirection_undo_list = (REDIRECT *)NULL;
+
+/* The list of redirections to perform which will undo the internal
+   redirections performed by the `exec' builtin.  These are redirections
+   that must be undone even when exec discards redirection_undo_list. */
+REDIRECT *exec_redirection_undo_list = (REDIRECT *)NULL;
+
+/* When greater than zero, value is the `level' of builtins we are
+   currently executing (e.g. `eval echo a' would have it set to 2). */
+int executing_builtin = 0;
+
+/* Non-zero if we are executing a command list (a;b;c, etc.) */
+int executing_list = 0;
+
+/* Non-zero if failing commands in a command substitution should not exit the
+   shell even if -e is set.  Used to pass the CMD_IGNORE_RETURN flag down to
+   commands run in command substitutions by parse_and_execute. */
+int comsub_ignore_return = 0;
+
+/* Non-zero if we have just forked and are currently running in a subshell
+   environment. */
+int subshell_environment;
+
+/* Count of nested subshells, like SHLVL.  Available via $BASH_SUBSHELL */
+int subshell_level = 0;
+
+/* Currently-executing shell function. */
+SHELL_VAR *this_shell_function;
+
+/* If non-zero, matches in case and [[ ... ]] are case-insensitive */
+int match_ignore_case = 0;
+
+int executing_command_builtin = 0;
+
+struct stat SB;                /* used for debugging */
+
+static int special_builtin_failed;
+
+static COMMAND *currently_executing_command;
+
+/* The line number that the currently executing function starts on. */
+static int function_line_number;
+
+/* XXX - set to 1 if we're running the DEBUG trap and we want to show the line
+   number containing the function name.  Used by executing_line_number to
+   report the correct line number.  Kind of a hack. */
+static int showing_function_line;
+
+/* $LINENO ($BASH_LINENO) for use by an ERR trap.  Global so parse_and_execute
+   can save and restore it. */
+int line_number_for_err_trap;
+
+/* A sort of function nesting level counter */
+int funcnest = 0;
+int funcnest_max = 0;          /* bash-4.2 */
+
+volatile int from_return_trap = 0;
+
+int lastpipe_opt = 0;
+
+struct fd_bitmap *current_fds_to_close = (struct fd_bitmap *)NULL;
+
+#define FD_BITMAP_DEFAULT_SIZE 32
+
+/* Functions to allocate and deallocate the structures used to pass
+   information from the shell to its children about file descriptors
+   to close. */
+struct fd_bitmap *
+new_fd_bitmap (size)
+     int size;
+{
+  struct fd_bitmap *ret;
+
+  ret = (struct fd_bitmap *)xmalloc (sizeof (struct fd_bitmap));
+
+  ret->size = size;
+
+  if (size)
+    {
+      ret->bitmap = (char *)xmalloc (size);
+      memset (ret->bitmap, '\0', size);
+    }
+  else
+    ret->bitmap = (char *)NULL;
+  return (ret);
+}
+
+void
+dispose_fd_bitmap (fdbp)
+     struct fd_bitmap *fdbp;
+{
+  FREE (fdbp->bitmap);
+  free (fdbp);
+}
+
+void
+close_fd_bitmap (fdbp)
+     struct fd_bitmap *fdbp;
+{
+  register int i;
+
+  if (fdbp)
+    {
+      for (i = 0; i < fdbp->size; i++)
+       if (fdbp->bitmap[i])
+         {
+           close (i);
+           fdbp->bitmap[i] = 0;
+         }
+    }
+}
+
+/* Return the line number of the currently executing command. */
+int
+executing_line_number ()
+{
+  if (executing && showing_function_line == 0 &&
+      (variable_context == 0 || interactive_shell == 0) &&
+      currently_executing_command)
+    {
+#if defined (COND_COMMAND)
+      if (currently_executing_command->type == cm_cond)
+       return currently_executing_command->value.Cond->line;
+#endif
+#if defined (DPAREN_ARITHMETIC)
+      if (currently_executing_command->type == cm_arith)
+       return currently_executing_command->value.Arith->line;
+#endif
+#if defined (ARITH_FOR_COMMAND)
+      if (currently_executing_command->type == cm_arith_for)
+       return currently_executing_command->value.ArithFor->line;
+#endif
+
+       return line_number;
+    }
+  else
+    return line_number;
+}
+
+/* Execute the command passed in COMMAND.  COMMAND is exactly what
+   read_command () places into GLOBAL_COMMAND.  See "command.h" for the
+   details of the command structure.
+
+   EXECUTION_SUCCESS or EXECUTION_FAILURE are the only possible
+   return values.  Executing a command with nothing in it returns
+   EXECUTION_SUCCESS. */
+int
+execute_command (command)
+     COMMAND *command;
+{
+  struct fd_bitmap *bitmap;
+  int result;
+
+  current_fds_to_close = (struct fd_bitmap *)NULL;
+  bitmap = new_fd_bitmap (FD_BITMAP_DEFAULT_SIZE);
+  begin_unwind_frame ("execute-command");
+  add_unwind_protect (dispose_fd_bitmap, (char *)bitmap);
+
+  /* Just do the command, but not asynchronously. */
+  result = execute_command_internal (command, 0, NO_PIPE, NO_PIPE, bitmap);
+
+  dispose_fd_bitmap (bitmap);
+  discard_unwind_frame ("execute-command");
+
+#if defined (PROCESS_SUBSTITUTION)
+  /* don't unlink fifos if we're in a shell function; wait until the function
+     returns. */
+  if (variable_context == 0)
+    unlink_fifo_list ();
+#endif /* PROCESS_SUBSTITUTION */
+
+  QUIT;
+  return (result);
+}
+
+/* Return 1 if TYPE is a shell control structure type. */
+static int
+shell_control_structure (type)
+     enum command_type type;
+{
+  switch (type)
+    {
+#if defined (ARITH_FOR_COMMAND)
+    case cm_arith_for:
+#endif
+#if defined (SELECT_COMMAND)
+    case cm_select:
+#endif
+#if defined (DPAREN_ARITHMETIC)
+    case cm_arith:
+#endif
+#if defined (COND_COMMAND)
+    case cm_cond:
+#endif
+    case cm_case:
+    case cm_while:
+    case cm_until:
+    case cm_if:
+    case cm_for:
+    case cm_group:
+    case cm_function_def:
+      return (1);
+
+    default:
+      return (0);
+    }
+}
+
+/* A function to use to unwind_protect the redirection undo list
+   for loops. */
+static void
+cleanup_redirects (list)
+     REDIRECT *list;
+{
+  do_redirections (list, RX_ACTIVE);
+  dispose_redirects (list);
+}
+
+#if 0
+/* Function to unwind_protect the redirections for functions and builtins. */
+static void
+cleanup_func_redirects (list)
+     REDIRECT *list;
+{
+  do_redirections (list, RX_ACTIVE);
+}
+#endif
+
+void
+dispose_exec_redirects ()
+{
+  if (exec_redirection_undo_list)
+    {
+      dispose_redirects (exec_redirection_undo_list);
+      exec_redirection_undo_list = (REDIRECT *)NULL;
+    }
+}
+
+#if defined (JOB_CONTROL)
+/* A function to restore the signal mask to its proper value when the shell
+   is interrupted or errors occur while creating a pipeline. */
+static int
+restore_signal_mask (set)
+     sigset_t *set;
+{
+  return (sigprocmask (SIG_SETMASK, set, (sigset_t *)NULL));
+}
+#endif /* JOB_CONTROL */
+
+#ifdef DEBUG
+/* A debugging function that can be called from gdb, for instance. */
+void
+open_files ()
+{
+  register int i;
+  int f, fd_table_size;
+
+  fd_table_size = getdtablesize ();
+
+  fprintf (stderr, "pid %ld open files:", (long)getpid ());
+  for (i = 3; i < fd_table_size; i++)
+    {
+      if ((f = fcntl (i, F_GETFD, 0)) != -1)
+       fprintf (stderr, " %d (%s)", i, f ? "close" : "open");
+    }
+  fprintf (stderr, "\n");
+}
+#endif
+
+static void
+async_redirect_stdin ()
+{
+  int fd;
+
+  fd = open ("/dev/null", O_RDONLY);
+  if (fd > 0)
+    {
+      dup2 (fd, 0);
+      close (fd);
+    }
+  else if (fd < 0)
+    internal_error (_("cannot redirect standard input from /dev/null: %s"), strerror (errno));
+}
+
+#define DESCRIBE_PID(pid) do { if (interactive) describe_pid (pid); } while (0)
+
+/* Execute the command passed in COMMAND, perhaps doing it asynchronously.
+   COMMAND is exactly what read_command () places into GLOBAL_COMMAND.
+   ASYNCHROUNOUS, if non-zero, says to do this command in the background.
+   PIPE_IN and PIPE_OUT are file descriptors saying where input comes
+   from and where it goes.  They can have the value of NO_PIPE, which means
+   I/O is stdin/stdout.
+   FDS_TO_CLOSE is a list of file descriptors to close once the child has
+   been forked.  This list often contains the unusable sides of pipes, etc.
+
+   EXECUTION_SUCCESS or EXECUTION_FAILURE are the only possible
+   return values.  Executing a command with nothing in it returns
+   EXECUTION_SUCCESS. */
+int
+execute_command_internal (command, asynchronous, pipe_in, pipe_out,
+                         fds_to_close)
+     COMMAND *command;
+     int asynchronous;
+     int pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int exec_result, user_subshell, invert, ignore_return, was_error_trap;
+  REDIRECT *my_undo_list, *exec_undo_list;
+  char *tcmd;
+  volatile int last_pid;
+  volatile int save_line_number;
+#if defined (PROCESS_SUBSTITUTION)
+  volatile int ofifo, nfifo, osize, saved_fifo;
+  volatile char *ofifo_list;
+#endif
+
+  if (breaking || continuing)
+    return (last_command_exit_value);
+  if (command == 0 || read_but_dont_execute)
+    return (EXECUTION_SUCCESS);
+
+  QUIT;
+  run_pending_traps ();
+
+#if 0
+  if (running_trap == 0)
+#endif
+    currently_executing_command = command;
+
+  invert = (command->flags & CMD_INVERT_RETURN) != 0;
+
+  /* If we're inverting the return value and `set -e' has been executed,
+     we don't want a failing command to inadvertently cause the shell
+     to exit. */
+  if (exit_immediately_on_error && invert)     /* XXX */
+    command->flags |= CMD_IGNORE_RETURN;       /* XXX */
+
+  exec_result = EXECUTION_SUCCESS;
+
+  /* If a command was being explicitly run in a subshell, or if it is
+     a shell control-structure, and it has a pipe, then we do the command
+     in a subshell. */
+  if (command->type == cm_subshell && (command->flags & CMD_NO_FORK))
+    return (execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close));
+
+#if defined (COPROCESS_SUPPORT)
+  if (command->type == cm_coproc)
+    return (execute_coproc (command, pipe_in, pipe_out, fds_to_close));
+#endif
+
+  user_subshell = command->type == cm_subshell || ((command->flags & CMD_WANT_SUBSHELL) != 0);
+
+  if (command->type == cm_subshell ||
+      (command->flags & (CMD_WANT_SUBSHELL|CMD_FORCE_SUBSHELL)) ||
+      (shell_control_structure (command->type) &&
+       (pipe_out != NO_PIPE || pipe_in != NO_PIPE || asynchronous)))
+    {
+      pid_t paren_pid;
+      int s;
+
+      /* Fork a subshell, turn off the subshell bit, turn off job
+        control and call execute_command () on the command again. */
+      line_number_for_err_trap = line_number;
+      tcmd = make_command_string (command);
+      paren_pid = make_child (savestring (tcmd), asynchronous);
+
+      if (user_subshell && signal_is_trapped (ERROR_TRAP) && 
+         signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+       {
+         FREE (the_printed_command_except_trap);
+         the_printed_command_except_trap = savestring (the_printed_command);
+       }
+
+      if (paren_pid == 0)
+        {
+         /* We want to run the exit trap for forced {} subshells, and we
+            want to note this before execute_in_subshell modifies the
+            COMMAND struct.  Need to keep in mind that execute_in_subshell
+            runs the exit trap for () subshells itself. */
+         /* This handles { command; } & */
+         s = user_subshell == 0 && command->type == cm_group && pipe_in == NO_PIPE && pipe_out == NO_PIPE && asynchronous;
+         /* run exit trap for : | { ...; } and { ...; } | : */
+         /* run exit trap for : | ( ...; ) and ( ...; ) | : */
+         s += user_subshell == 0 && command->type == cm_group && (pipe_in != NO_PIPE || pipe_out != NO_PIPE) && asynchronous == 0;
+
+         last_command_exit_value = execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close);
+         if (s)
+           subshell_exit (last_command_exit_value);
+         else
+           exit (last_command_exit_value);
+         /* NOTREACHED */
+        }
+      else
+       {
+         close_pipes (pipe_in, pipe_out);
+
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+         if (variable_context == 0)    /* wait until shell function completes */
+           unlink_fifo_list ();
+#endif
+         /* If we are part of a pipeline, and not the end of the pipeline,
+            then we should simply return and let the last command in the
+            pipe be waited for.  If we are not in a pipeline, or are the
+            last command in the pipeline, then we wait for the subshell
+            and return its exit status as usual. */
+         if (pipe_out != NO_PIPE)
+           return (EXECUTION_SUCCESS);
+
+         stop_pipeline (asynchronous, (COMMAND *)NULL);
+
+         if (asynchronous == 0)
+           {
+             was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0;
+             invert = (command->flags & CMD_INVERT_RETURN) != 0;
+             ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+             exec_result = wait_for (paren_pid);
+
+             /* If we have to, invert the return value. */
+             if (invert)
+               exec_result = ((exec_result == EXECUTION_SUCCESS)
+                               ? EXECUTION_FAILURE
+                               : EXECUTION_SUCCESS);
+
+             last_command_exit_value = exec_result;
+             if (user_subshell && was_error_trap && ignore_return == 0 && invert == 0 && exec_result != EXECUTION_SUCCESS)
+               {
+                 save_line_number = line_number;
+                 line_number = line_number_for_err_trap;
+                 run_error_trap ();
+                 line_number = save_line_number;
+               }
+
+             if (user_subshell && ignore_return == 0 && invert == 0 && exit_immediately_on_error && exec_result != EXECUTION_SUCCESS)
+               {
+                 run_pending_traps ();
+                 jump_to_top_level (ERREXIT);
+               }
+
+             return (last_command_exit_value);
+           }
+         else
+           {
+             DESCRIBE_PID (paren_pid);
+
+             run_pending_traps ();
+
+             /* Posix 2013 2.9.3.1: "the exit status of an asynchronous list
+                shall be zero." */
+             last_command_exit_value = 0;
+             return (EXECUTION_SUCCESS);
+           }
+       }
+    }
+
+#if defined (COMMAND_TIMING)
+  if (command->flags & CMD_TIME_PIPELINE)
+    {
+      if (asynchronous)
+       {
+         command->flags |= CMD_FORCE_SUBSHELL;
+         exec_result = execute_command_internal (command, 1, pipe_in, pipe_out, fds_to_close);
+       }
+      else
+       {
+         exec_result = time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close);
+#if 0
+         if (running_trap == 0)
+#endif
+           currently_executing_command = (COMMAND *)NULL;
+       }
+      return (exec_result);
+    }
+#endif /* COMMAND_TIMING */
+
+  if (shell_control_structure (command->type) && command->redirects)
+    stdin_redir = stdin_redirects (command->redirects);
+
+#if defined (PROCESS_SUBSTITUTION)
+  if (variable_context != 0)
+    {
+      ofifo = num_fifos ();
+      ofifo_list = copy_fifo_list ((int *)&osize);
+      saved_fifo = 1;
+    }
+  else
+    saved_fifo = 0;
+#endif
+
+  /* Handle WHILE FOR CASE etc. with redirections.  (Also '&' input
+     redirection.)  */
+  if (do_redirections (command->redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
+    {
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+      dispose_exec_redirects ();
+#if defined (PROCESS_SUBSTITUTION)
+      if (saved_fifo)
+       free ((void *)ofifo_list);
+#endif
+      return (last_command_exit_value = EXECUTION_FAILURE);
+    }
+
+  if (redirection_undo_list)
+    {
+      /* XXX - why copy here? */
+      my_undo_list = (REDIRECT *)copy_redirects (redirection_undo_list);
+      dispose_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+    }
+  else
+    my_undo_list = (REDIRECT *)NULL;
+
+  if (exec_redirection_undo_list)
+    {
+      /* XXX - why copy here? */
+      exec_undo_list = (REDIRECT *)copy_redirects (exec_redirection_undo_list);
+      dispose_redirects (exec_redirection_undo_list);
+      exec_redirection_undo_list = (REDIRECT *)NULL;
+    }
+  else
+    exec_undo_list = (REDIRECT *)NULL;
+
+  if (my_undo_list || exec_undo_list)
+    begin_unwind_frame ("loop_redirections");
+
+  if (my_undo_list)
+    add_unwind_protect ((Function *)cleanup_redirects, my_undo_list);
+
+  if (exec_undo_list)
+    add_unwind_protect ((Function *)dispose_redirects, exec_undo_list);
+
+  ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+  QUIT;
+
+  switch (command->type)
+    {
+    case cm_simple:
+      {
+       save_line_number = line_number;
+       /* We can't rely on variables retaining their values across a
+          call to execute_simple_command if a longjmp occurs as the
+          result of a `return' builtin.  This is true for sure with gcc. */
+#if defined (RECYCLES_PIDS)
+       last_made_pid = NO_PID;
+#endif
+       last_pid = last_made_pid;
+       was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0;
+
+       if (ignore_return && command->value.Simple)
+         command->value.Simple->flags |= CMD_IGNORE_RETURN;
+       if (command->flags & CMD_STDIN_REDIR)
+         command->value.Simple->flags |= CMD_STDIN_REDIR;
+
+       line_number_for_err_trap = line_number = command->value.Simple->line;
+       exec_result =
+         execute_simple_command (command->value.Simple, pipe_in, pipe_out,
+                                 asynchronous, fds_to_close);
+       line_number = save_line_number;
+
+       /* The temporary environment should be used for only the simple
+          command immediately following its definition. */
+       dispose_used_env_vars ();
+
+#if (defined (ultrix) && defined (mips)) || defined (C_ALLOCA)
+       /* Reclaim memory allocated with alloca () on machines which
+          may be using the alloca emulation code. */
+       (void) alloca (0);
+#endif /* (ultrix && mips) || C_ALLOCA */
+
+       /* If we forked to do the command, then we must wait_for ()
+          the child. */
+
+       /* XXX - this is something to watch out for if there are problems
+          when the shell is compiled without job control.  Don't worry about
+          whether or not last_made_pid == last_pid; already_making_children
+          tells us whether or not there are unwaited-for children to wait
+          for and reap. */
+       if (already_making_children && pipe_out == NO_PIPE)
+         {
+           stop_pipeline (asynchronous, (COMMAND *)NULL);
+
+           if (asynchronous)
+             {
+               DESCRIBE_PID (last_made_pid);
+             }
+           else
+#if !defined (JOB_CONTROL)
+             /* Do not wait for asynchronous processes started from
+                startup files. */
+           if (last_made_pid != last_asynchronous_pid)
+#endif
+           /* When executing a shell function that executes other
+              commands, this causes the last simple command in
+              the function to be waited for twice.  This also causes
+              subshells forked to execute builtin commands (e.g., in
+              pipelines) to be waited for twice. */
+             exec_result = wait_for (last_made_pid);
+         }
+      }
+
+      /* 2009/02/13 -- pipeline failure is processed elsewhere.  This handles
+        only the failure of a simple command. */
+      if (was_error_trap && ignore_return == 0 && invert == 0 && pipe_in == NO_PIPE && pipe_out == NO_PIPE && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         line_number = line_number_for_err_trap;
+         run_error_trap ();
+         line_number = save_line_number;
+       }
+
+      if (ignore_return == 0 && invert == 0 &&
+         ((posixly_correct && interactive == 0 && special_builtin_failed) ||
+          (exit_immediately_on_error && pipe_in == NO_PIPE && pipe_out == NO_PIPE && exec_result != EXECUTION_SUCCESS)))
+       {
+         last_command_exit_value = exec_result;
+         run_pending_traps ();
+         jump_to_top_level (ERREXIT);
+       }
+
+      break;
+
+    case cm_for:
+      if (ignore_return)
+       command->value.For->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_for_command (command->value.For);
+      break;
+
+#if defined (ARITH_FOR_COMMAND)
+    case cm_arith_for:
+      if (ignore_return)
+       command->value.ArithFor->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_arith_for_command (command->value.ArithFor);
+      break;
+#endif
+
+#if defined (SELECT_COMMAND)
+    case cm_select:
+      if (ignore_return)
+       command->value.Select->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_select_command (command->value.Select);
+      break;
+#endif
+
+    case cm_case:
+      if (ignore_return)
+       command->value.Case->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_case_command (command->value.Case);
+      break;
+
+    case cm_while:
+      if (ignore_return)
+       command->value.While->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_while_command (command->value.While);
+      break;
+
+    case cm_until:
+      if (ignore_return)
+       command->value.While->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_until_command (command->value.While);
+      break;
+
+    case cm_if:
+      if (ignore_return)
+       command->value.If->flags |= CMD_IGNORE_RETURN;
+      exec_result = execute_if_command (command->value.If);
+      break;
+
+    case cm_group:
+
+      /* This code can be executed from either of two paths: an explicit
+        '{}' command, or via a function call.  If we are executed via a
+        function call, we have already taken care of the function being
+        executed in the background (down there in execute_simple_command ()),
+        and this command should *not* be marked as asynchronous.  If we
+        are executing a regular '{}' group command, and asynchronous == 1,
+        we must want to execute the whole command in the background, so we
+        need a subshell, and we want the stuff executed in that subshell
+        (this group command) to be executed in the foreground of that
+        subshell (i.e. there will not be *another* subshell forked).
+
+        What we do is to force a subshell if asynchronous, and then call
+        execute_command_internal again with asynchronous still set to 1,
+        but with the original group command, so the printed command will
+        look right.
+
+        The code above that handles forking off subshells will note that
+        both subshell and async are on, and turn off async in the child
+        after forking the subshell (but leave async set in the parent, so
+        the normal call to describe_pid is made).  This turning off
+        async is *crucial*; if it is not done, this will fall into an
+        infinite loop of executions through this spot in subshell after
+        subshell until the process limit is exhausted. */
+
+      if (asynchronous)
+       {
+         command->flags |= CMD_FORCE_SUBSHELL;
+         exec_result =
+           execute_command_internal (command, 1, pipe_in, pipe_out,
+                                     fds_to_close);
+       }
+      else
+       {
+         if (ignore_return && command->value.Group->command)
+           command->value.Group->command->flags |= CMD_IGNORE_RETURN;
+         exec_result =
+           execute_command_internal (command->value.Group->command,
+                                     asynchronous, pipe_in, pipe_out,
+                                     fds_to_close);
+       }
+      break;
+
+    case cm_connection:
+      exec_result = execute_connection (command, asynchronous,
+                                       pipe_in, pipe_out, fds_to_close);
+      break;
+
+#if defined (DPAREN_ARITHMETIC)
+    case cm_arith:
+      was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0;
+      if (ignore_return)
+       command->value.Arith->flags |= CMD_IGNORE_RETURN;
+      line_number_for_err_trap = save_line_number = line_number;
+      exec_result = execute_arith_command (command->value.Arith);
+      line_number = save_line_number;
+
+      if (was_error_trap && ignore_return == 0 && invert == 0 && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         save_line_number = line_number;
+         line_number = line_number_for_err_trap;
+         run_error_trap ();
+         line_number = save_line_number;
+       }
+
+      if (ignore_return == 0 && invert == 0 && exit_immediately_on_error && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         run_pending_traps ();
+         jump_to_top_level (ERREXIT);
+       }
+
+      break;
+#endif
+
+#if defined (COND_COMMAND)
+    case cm_cond:
+      was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0;
+      if (ignore_return)
+       command->value.Cond->flags |= CMD_IGNORE_RETURN;
+
+      line_number_for_err_trap = save_line_number = line_number;
+      exec_result = execute_cond_command (command->value.Cond);
+      line_number = save_line_number;
+
+      if (was_error_trap && ignore_return == 0 && invert == 0 && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         save_line_number = line_number;
+         line_number = line_number_for_err_trap;
+         run_error_trap ();
+         line_number = save_line_number;
+       }
+
+      if (ignore_return == 0 && invert == 0 && exit_immediately_on_error && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         run_pending_traps ();
+         jump_to_top_level (ERREXIT);
+       }
+
+      break;
+#endif
+    
+    case cm_function_def:
+      exec_result = execute_intern_function (command->value.Function_def->name,
+                                            command->value.Function_def);
+      break;
+
+    default:
+      command_error ("execute_command", CMDERR_BADTYPE, command->type, 0);
+    }
+
+  if (my_undo_list)
+    {
+      do_redirections (my_undo_list, RX_ACTIVE);
+      dispose_redirects (my_undo_list);
+    }
+
+  if (exec_undo_list)
+    dispose_redirects (exec_undo_list);
+
+  if (my_undo_list || exec_undo_list)
+    discard_unwind_frame ("loop_redirections");
+
+#if defined (PROCESS_SUBSTITUTION)
+  if (saved_fifo)
+    {
+      nfifo = num_fifos ();
+      if (nfifo > ofifo)
+       close_new_fifos ((char *)ofifo_list, osize);
+      free ((void *)ofifo_list);
+    }
+#endif
+
+  /* Invert the return value if we have to */
+  if (invert)
+    exec_result = (exec_result == EXECUTION_SUCCESS)
+                   ? EXECUTION_FAILURE
+                   : EXECUTION_SUCCESS;
+
+#if defined (DPAREN_ARITHMETIC) || defined (COND_COMMAND)
+  /* This is where we set PIPESTATUS from the exit status of the appropriate
+     compound commands (the ones that look enough like simple commands to
+     cause confusion).  We might be able to optimize by not doing this if
+     subshell_environment != 0. */
+  switch (command->type)
+    {
+#  if defined (DPAREN_ARITHMETIC)
+    case cm_arith:
+#  endif
+#  if defined (COND_COMMAND)
+    case cm_cond:
+#  endif
+      set_pipestatus_from_exit (exec_result);
+      break;
+    }
+#endif
+
+  last_command_exit_value = exec_result;
+  run_pending_traps ();
+#if 0
+  if (running_trap == 0)
+#endif
+    currently_executing_command = (COMMAND *)NULL;
+
+  return (last_command_exit_value);
+}
+
+#if defined (COMMAND_TIMING)
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+extern struct timeval *difftimeval __P((struct timeval *, struct timeval *, struct timeval *));
+extern struct timeval *addtimeval __P((struct timeval *, struct timeval *, struct timeval *));
+extern int timeval_to_cpu __P((struct timeval *, struct timeval *, struct timeval *));
+#endif
+
+#define POSIX_TIMEFORMAT "real %2R\nuser %2U\nsys %2S"
+#define BASH_TIMEFORMAT  "\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS"
+
+static const int precs[] = { 0, 100, 10, 1 };
+
+/* Expand one `%'-prefixed escape sequence from a time format string. */
+static int
+mkfmt (buf, prec, lng, sec, sec_fraction)
+     char *buf;
+     int prec, lng;
+     time_t sec;
+     int sec_fraction;
+{
+  time_t min;
+  char abuf[INT_STRLEN_BOUND(time_t) + 1];
+  int ind, aind;
+
+  ind = 0;
+  abuf[sizeof(abuf) - 1] = '\0';
+
+  /* If LNG is non-zero, we want to decompose SEC into minutes and seconds. */
+  if (lng)
+    {
+      min = sec / 60;
+      sec %= 60;
+      aind = sizeof(abuf) - 2;
+      do
+       abuf[aind--] = (min % 10) + '0';
+      while (min /= 10);
+      aind++;
+      while (abuf[aind])
+       buf[ind++] = abuf[aind++];
+      buf[ind++] = 'm';
+    }
+
+  /* Now add the seconds. */
+  aind = sizeof (abuf) - 2;
+  do
+    abuf[aind--] = (sec % 10) + '0';
+  while (sec /= 10);
+  aind++;
+  while (abuf[aind])
+    buf[ind++] = abuf[aind++];
+
+  /* We want to add a decimal point and PREC places after it if PREC is
+     nonzero.  PREC is not greater than 3.  SEC_FRACTION is between 0
+     and 999. */
+  if (prec != 0)
+    {
+      buf[ind++] = '.';
+      for (aind = 1; aind <= prec; aind++)
+       {
+         buf[ind++] = (sec_fraction / precs[aind]) + '0';
+         sec_fraction %= precs[aind];
+       }
+    }
+
+  if (lng)
+    buf[ind++] = 's';
+  buf[ind] = '\0';
+
+  return (ind);
+}
+
+/* Interpret the format string FORMAT, interpolating the following escape
+   sequences:
+               %[prec][l][RUS]
+
+   where the optional `prec' is a precision, meaning the number of
+   characters after the decimal point, the optional `l' means to format
+   using minutes and seconds (MMmNN[.FF]s), like the `times' builtin',
+   and the last character is one of
+   
+               R       number of seconds of `real' time
+               U       number of seconds of `user' time
+               S       number of seconds of `system' time
+
+   An occurrence of `%%' in the format string is translated to a `%'.  The
+   result is printed to FP, a pointer to a FILE.  The other variables are
+   the seconds and thousandths of a second of real, user, and system time,
+   resectively. */
+static void
+print_formatted_time (fp, format, rs, rsf, us, usf, ss, ssf, cpu)
+     FILE *fp;
+     char *format;
+     time_t rs;
+     int rsf;
+     time_t us;
+     int usf;
+     time_t ss;
+     int ssf, cpu;
+{
+  int prec, lng, len;
+  char *str, *s, ts[INT_STRLEN_BOUND (time_t) + sizeof ("mSS.FFFF")];
+  time_t sum;
+  int sum_frac;
+  int sindex, ssize;
+
+  len = strlen (format);
+  ssize = (len + 64) - (len % 64);
+  str = (char *)xmalloc (ssize);
+  sindex = 0;
+
+  for (s = format; *s; s++)
+    {
+      if (*s != '%' || s[1] == '\0')
+       {
+         RESIZE_MALLOCED_BUFFER (str, sindex, 1, ssize, 64);
+         str[sindex++] = *s;
+       }
+      else if (s[1] == '%')
+       {
+         s++;
+         RESIZE_MALLOCED_BUFFER (str, sindex, 1, ssize, 64);
+         str[sindex++] = *s;
+       }
+      else if (s[1] == 'P')
+       {
+         s++;
+#if 0
+         /* clamp CPU usage at 100% */
+         if (cpu > 10000)
+           cpu = 10000;
+#endif
+         sum = cpu / 100;
+         sum_frac = (cpu % 100) * 10;
+         len = mkfmt (ts, 2, 0, sum, sum_frac);
+         RESIZE_MALLOCED_BUFFER (str, sindex, len, ssize, 64);
+         strcpy (str + sindex, ts);
+         sindex += len;
+       }
+      else
+       {
+         prec = 3;     /* default is three places past the decimal point. */
+         lng = 0;      /* default is to not use minutes or append `s' */
+         s++;
+         if (DIGIT (*s))               /* `precision' */
+           {
+             prec = *s++ - '0';
+             if (prec > 3) prec = 3;
+           }
+         if (*s == 'l')                /* `length extender' */
+           {
+             lng = 1;
+             s++;
+           }
+         if (*s == 'R' || *s == 'E')
+           len = mkfmt (ts, prec, lng, rs, rsf);
+         else if (*s == 'U')
+           len = mkfmt (ts, prec, lng, us, usf);
+         else if (*s == 'S')
+           len = mkfmt (ts, prec, lng, ss, ssf);
+         else
+           {
+             internal_error (_("TIMEFORMAT: `%c': invalid format character"), *s);
+             free (str);
+             return;
+           }
+         RESIZE_MALLOCED_BUFFER (str, sindex, len, ssize, 64);
+         strcpy (str + sindex, ts);
+         sindex += len;
+       }
+    }
+
+  str[sindex] = '\0';
+  fprintf (fp, "%s\n", str);
+  fflush (fp);
+
+  free (str);
+}
+
+static int
+time_command (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous, pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int rv, posix_time, old_flags, nullcmd;
+  time_t rs, us, ss;
+  int rsf, usf, ssf;
+  int cpu;
+  char *time_format;
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+  struct timeval real, user, sys;
+  struct timeval before, after;
+#  if defined (HAVE_STRUCT_TIMEZONE)
+  struct timezone dtz;                         /* posix doesn't define this */
+#  endif
+  struct rusage selfb, selfa, kidsb, kidsa;    /* a = after, b = before */
+#else
+#  if defined (HAVE_TIMES)
+  clock_t tbefore, tafter, real, user, sys;
+  struct tms before, after;
+#  endif
+#endif
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+#  if defined (HAVE_STRUCT_TIMEZONE)
+  gettimeofday (&before, &dtz);
+#  else
+  gettimeofday (&before, (void *)NULL);
+#  endif /* !HAVE_STRUCT_TIMEZONE */
+  getrusage (RUSAGE_SELF, &selfb);
+  getrusage (RUSAGE_CHILDREN, &kidsb);
+#else
+#  if defined (HAVE_TIMES)
+  tbefore = times (&before);
+#  endif
+#endif
+
+  posix_time = command && (command->flags & CMD_TIME_POSIX);
+
+  nullcmd = (command == 0) || (command->type == cm_simple && command->value.Simple->words == 0 && command->value.Simple->redirects == 0);
+  if (posixly_correct && nullcmd)
+    {
+#if defined (HAVE_GETRUSAGE)
+      selfb.ru_utime.tv_sec = kidsb.ru_utime.tv_sec = selfb.ru_stime.tv_sec = kidsb.ru_stime.tv_sec = 0;
+      selfb.ru_utime.tv_usec = kidsb.ru_utime.tv_usec = selfb.ru_stime.tv_usec = kidsb.ru_stime.tv_usec = 0;
+      before.tv_sec = shell_start_time;
+      before.tv_usec = 0;
+#else
+      before.tms_utime = before.tms_stime = before.tms_cutime = before.tms_cstime = 0;
+      tbefore = shell_start_time;
+#endif
+    }
+
+  old_flags = command->flags;
+  command->flags &= ~(CMD_TIME_PIPELINE|CMD_TIME_POSIX);
+  rv = execute_command_internal (command, asynchronous, pipe_in, pipe_out, fds_to_close);
+  command->flags = old_flags;
+
+  rs = us = ss = 0;
+  rsf = usf = ssf = cpu = 0;
+
+#if defined (HAVE_GETRUSAGE) && defined (HAVE_GETTIMEOFDAY)
+#  if defined (HAVE_STRUCT_TIMEZONE)
+  gettimeofday (&after, &dtz);
+#  else
+  gettimeofday (&after, (void *)NULL);
+#  endif /* !HAVE_STRUCT_TIMEZONE */
+  getrusage (RUSAGE_SELF, &selfa);
+  getrusage (RUSAGE_CHILDREN, &kidsa);
+
+  difftimeval (&real, &before, &after);
+  timeval_to_secs (&real, &rs, &rsf);
+
+  addtimeval (&user, difftimeval(&after, &selfb.ru_utime, &selfa.ru_utime),
+                    difftimeval(&before, &kidsb.ru_utime, &kidsa.ru_utime));
+  timeval_to_secs (&user, &us, &usf);
+
+  addtimeval (&sys, difftimeval(&after, &selfb.ru_stime, &selfa.ru_stime),
+                   difftimeval(&before, &kidsb.ru_stime, &kidsa.ru_stime));
+  timeval_to_secs (&sys, &ss, &ssf);
+
+  cpu = timeval_to_cpu (&real, &user, &sys);
+#else
+#  if defined (HAVE_TIMES)
+  tafter = times (&after);
+
+  real = tafter - tbefore;
+  clock_t_to_secs (real, &rs, &rsf);
+
+  user = (after.tms_utime - before.tms_utime) + (after.tms_cutime - before.tms_cutime);
+  clock_t_to_secs (user, &us, &usf);
+
+  sys = (after.tms_stime - before.tms_stime) + (after.tms_cstime - before.tms_cstime);
+  clock_t_to_secs (sys, &ss, &ssf);
+
+  cpu = (real == 0) ? 0 : ((user + sys) * 10000) / real;
+
+#  else
+  rs = us = ss = 0;
+  rsf = usf = ssf = cpu = 0;
+#  endif
+#endif
+
+  if (posix_time)
+    time_format = POSIX_TIMEFORMAT;
+  else if ((time_format = get_string_value ("TIMEFORMAT")) == 0)
+    {
+      if (posixly_correct && nullcmd)
+       time_format = "user\t%2lU\nsys\t%2lS";
+      else
+       time_format = BASH_TIMEFORMAT;
+    }
+  if (time_format && *time_format)
+    print_formatted_time (stderr, time_format, rs, rsf, us, usf, ss, ssf, cpu);
+
+  return rv;
+}
+#endif /* COMMAND_TIMING */
+
+/* Execute a command that's supposed to be in a subshell.  This must be
+   called after make_child and we must be running in the child process.
+   The caller will return or exit() immediately with the value this returns. */
+static int
+execute_in_subshell (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous;
+     int pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int user_subshell, return_code, function_value, should_redir_stdin, invert;
+  int ois, user_coproc;
+  int result;
+  volatile COMMAND *tcom;
+
+  USE_VAR(user_subshell);
+  USE_VAR(user_coproc);
+  USE_VAR(invert);
+  USE_VAR(tcom);
+  USE_VAR(asynchronous);
+
+  subshell_level++;
+  should_redir_stdin = (asynchronous && (command->flags & CMD_STDIN_REDIR) &&
+                         pipe_in == NO_PIPE &&
+                         stdin_redirects (command->redirects) == 0);
+
+  invert = (command->flags & CMD_INVERT_RETURN) != 0;
+  user_subshell = command->type == cm_subshell || ((command->flags & CMD_WANT_SUBSHELL) != 0);
+  user_coproc = command->type == cm_coproc;
+
+  command->flags &= ~(CMD_FORCE_SUBSHELL | CMD_WANT_SUBSHELL | CMD_INVERT_RETURN);
+
+  /* If a command is asynchronous in a subshell (like ( foo ) & or
+     the special case of an asynchronous GROUP command where the
+     the subshell bit is turned on down in case cm_group: below),
+     turn off `asynchronous', so that two subshells aren't spawned.
+     XXX - asynchronous used to be set to 0 in this block, but that
+     means that setup_async_signals was never run.  Now it's set to
+     0 after subshell_environment is set appropriately and setup_async_signals
+     is run.
+
+     This seems semantically correct to me.  For example,
+     ( foo ) & seems to say ``do the command `foo' in a subshell
+     environment, but don't wait for that subshell to finish'',
+     and "{ foo ; bar ; } &" seems to me to be like functions or
+     builtins in the background, which executed in a subshell
+     environment.  I just don't see the need to fork two subshells. */
+
+  /* Don't fork again, we are already in a subshell.  A `doubly
+     async' shell is not interactive, however. */
+  if (asynchronous)
+    {
+#if defined (JOB_CONTROL)
+      /* If a construct like ( exec xxx yyy ) & is given while job
+        control is active, we want to prevent exec from putting the
+        subshell back into the original process group, carefully
+        undoing all the work we just did in make_child. */
+      original_pgrp = -1;
+#endif /* JOB_CONTROL */
+      ois = interactive_shell;
+      interactive_shell = 0;
+      /* This test is to prevent alias expansion by interactive shells that
+        run `(command) &' but to allow scripts that have enabled alias
+        expansion with `shopt -s expand_alias' to continue to expand
+        aliases. */
+      if (ois != interactive_shell)
+       expand_aliases = 0;
+    }
+
+  /* Subshells are neither login nor interactive. */
+  login_shell = interactive = 0;
+
+  if (user_subshell)
+    subshell_environment = SUBSHELL_PAREN;
+  else
+    {
+      subshell_environment = 0;                        /* XXX */
+      if (asynchronous)
+       subshell_environment |= SUBSHELL_ASYNC;
+      if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+       subshell_environment |= SUBSHELL_PIPE;
+      if (user_coproc)
+       subshell_environment |= SUBSHELL_COPROC;
+    }
+
+  reset_terminating_signals ();                /* in sig.c */
+  /* Cancel traps, in trap.c. */
+  /* Reset the signal handlers in the child, but don't free the
+     trap strings.  Set a flag noting that we have to free the
+     trap strings if we run trap to change a signal disposition. */
+  reset_signal_handlers ();
+  subshell_environment |= SUBSHELL_RESETTRAP;
+
+  /* Make sure restore_original_signals doesn't undo the work done by
+     make_child to ensure that asynchronous children are immune to SIGINT
+     and SIGQUIT.  Turn off asynchronous to make sure more subshells are
+     not spawned. */
+  if (asynchronous)
+    {
+      setup_async_signals ();
+      asynchronous = 0;
+    }
+
+#if defined (JOB_CONTROL)
+  set_sigchld_handler ();
+#endif /* JOB_CONTROL */
+
+  set_sigint_handler ();
+
+#if defined (JOB_CONTROL)
+  /* Delete all traces that there were any jobs running.  This is
+     only for subshells. */
+  without_job_control ();
+#endif /* JOB_CONTROL */
+
+  if (fds_to_close)
+    close_fd_bitmap (fds_to_close);
+
+  do_piping (pipe_in, pipe_out);
+
+#if defined (COPROCESS_SUPPORT)
+  coproc_closeall ();
+#endif
+
+  /* If this is a user subshell, set a flag if stdin was redirected.
+     This is used later to decide whether to redirect fd 0 to
+     /dev/null for async commands in the subshell.  This adds more
+     sh compatibility, but I'm not sure it's the right thing to do. */
+  if (user_subshell)
+    {
+      stdin_redir = stdin_redirects (command->redirects);
+      restore_default_signal (EXIT_TRAP);
+    }
+
+  /* If this is an asynchronous command (command &), we want to
+     redirect the standard input from /dev/null in the absence of
+     any specific redirection involving stdin. */
+  if (should_redir_stdin && stdin_redir == 0)
+    async_redirect_stdin ();
+
+  /* Do redirections, then dispose of them before recursive call. */
+  if (command->redirects)
+    {
+      if (do_redirections (command->redirects, RX_ACTIVE) != 0)
+       exit (invert ? EXECUTION_SUCCESS : EXECUTION_FAILURE);
+
+      dispose_redirects (command->redirects);
+      command->redirects = (REDIRECT *)NULL;
+    }
+
+  if (command->type == cm_subshell)
+    tcom = command->value.Subshell->command;
+  else if (user_coproc)
+    tcom = command->value.Coproc->command;
+  else
+    tcom = command;
+
+  if (command->flags & CMD_TIME_PIPELINE)
+    tcom->flags |= CMD_TIME_PIPELINE;
+  if (command->flags & CMD_TIME_POSIX)
+    tcom->flags |= CMD_TIME_POSIX;
+  
+  /* Make sure the subshell inherits any CMD_IGNORE_RETURN flag. */
+  if ((command->flags & CMD_IGNORE_RETURN) && tcom != command)
+    tcom->flags |= CMD_IGNORE_RETURN;
+
+  /* If this is a simple command, tell execute_disk_command that it
+     might be able to get away without forking and simply exec.
+     This means things like ( sleep 10 ) will only cause one fork.
+     If we're timing the command or inverting its return value, however,
+     we cannot do this optimization. */
+  if ((user_subshell || user_coproc) && (tcom->type == cm_simple || tcom->type == cm_subshell) &&
+      ((tcom->flags & CMD_TIME_PIPELINE) == 0) &&
+      ((tcom->flags & CMD_INVERT_RETURN) == 0))
+    {
+      tcom->flags |= CMD_NO_FORK;
+      if (tcom->type == cm_simple)
+       tcom->value.Simple->flags |= CMD_NO_FORK;
+    }
+
+  invert = (tcom->flags & CMD_INVERT_RETURN) != 0;
+  tcom->flags &= ~CMD_INVERT_RETURN;
+
+  result = setjmp_nosigs (top_level);
+
+  /* If we're inside a function while executing this subshell, we
+     need to handle a possible `return'. */
+  function_value = 0;
+  if (return_catch_flag)
+    function_value = setjmp_nosigs (return_catch);
+
+  /* If we're going to exit the shell, we don't want to invert the return
+     status. */
+  if (result == EXITPROG)
+    invert = 0, return_code = last_command_exit_value;
+  else if (result)
+    return_code = EXECUTION_FAILURE;
+  else if (function_value)
+    return_code = return_catch_value;
+  else
+    return_code = execute_command_internal ((COMMAND *)tcom, asynchronous, NO_PIPE, NO_PIPE, fds_to_close);
+
+  /* If we are asked to, invert the return value. */
+  if (invert)
+    return_code = (return_code == EXECUTION_SUCCESS) ? EXECUTION_FAILURE
+                                                    : EXECUTION_SUCCESS;
+
+  /* If we were explicitly placed in a subshell with (), we need
+     to do the `shell cleanup' things, such as running traps[0]. */
+  if (user_subshell && signal_is_trapped (0))
+    {
+      last_command_exit_value = return_code;
+      return_code = run_exit_trap ();
+    }
+
+  subshell_level--;
+  return (return_code);
+  /* NOTREACHED */
+}
+
+#if defined (COPROCESS_SUPPORT)
+#define COPROC_MAX     16
+
+typedef struct cpelement
+  {
+    struct cpelement *next;
+    struct coproc *coproc;
+  }
+cpelement_t;
+    
+typedef struct cplist
+  {
+    struct cpelement *head;
+    struct cpelement *tail;
+    int ncoproc;
+    int lock;
+  }
+cplist_t;
+
+static struct cpelement *cpe_alloc __P((struct coproc *));
+static void cpe_dispose __P((struct cpelement *));
+static struct cpelement *cpl_add __P((struct coproc *));
+static struct cpelement *cpl_delete __P((pid_t));
+static void cpl_reap __P((void));
+static void cpl_flush __P((void));
+static void cpl_closeall __P((void));
+static struct cpelement *cpl_search __P((pid_t));
+static struct cpelement *cpl_searchbyname __P((const char *));
+static void cpl_prune __P((void));
+
+static void coproc_free __P((struct coproc *));
+
+/* Will go away when there is fully-implemented support for multiple coprocs. */
+Coproc sh_coproc = { 0, NO_PID, -1, -1, 0, 0, 0, 0, 0 };
+
+cplist_t coproc_list = {0, 0, 0};
+
+/* Functions to manage the list of coprocs */
+
+static struct cpelement *
+cpe_alloc (cp)
+     Coproc *cp;
+{
+  struct cpelement *cpe;
+
+  cpe = (struct cpelement *)xmalloc (sizeof (struct cpelement));
+  cpe->coproc = cp;
+  cpe->next = (struct cpelement *)0;
+  return cpe;
+}
+
+static void
+cpe_dispose (cpe)
+      struct cpelement *cpe;
+{
+  free (cpe);
+}
+
+static struct cpelement *
+cpl_add (cp)
+     Coproc *cp;
+{
+  struct cpelement *cpe;
+
+  cpe = cpe_alloc (cp);
+
+  if (coproc_list.head == 0)
+    {
+      coproc_list.head = coproc_list.tail = cpe;
+      coproc_list.ncoproc = 0;                 /* just to make sure */
+    }
+  else
+    {
+      coproc_list.tail->next = cpe;
+      coproc_list.tail = cpe;
+    }
+  coproc_list.ncoproc++;
+
+  return cpe;
+}
+
+static struct cpelement *
+cpl_delete (pid)
+     pid_t pid;
+{
+  struct cpelement *prev, *p;
+
+  for (prev = p = coproc_list.head; p; prev = p, p = p->next)
+    if (p->coproc->c_pid == pid)
+      {
+        prev->next = p->next;  /* remove from list */
+        break;
+      }
+
+  if (p == 0)
+    return 0;          /* not found */
+
+#if defined (DEBUG)
+  itrace("cpl_delete: deleting %d", pid);
+#endif
+
+  /* Housekeeping in the border cases. */
+  if (p == coproc_list.head)
+    coproc_list.head = coproc_list.head->next;
+  else if (p == coproc_list.tail)
+    coproc_list.tail = prev;
+
+  coproc_list.ncoproc--;
+  if (coproc_list.ncoproc == 0)
+    coproc_list.head = coproc_list.tail = 0;
+  else if (coproc_list.ncoproc == 1)
+    coproc_list.tail = coproc_list.head;               /* just to make sure */
+
+  return (p);
+}
+
+static void
+cpl_reap ()
+{
+  struct cpelement *p, *next, *nh, *nt;
+
+  /* Build a new list by removing dead coprocs and fix up the coproc_list
+     pointers when done. */
+  nh = nt = next = (struct cpelement *)0;
+  for (p = coproc_list.head; p; p = next)
+    {
+      next = p->next;
+      if (p->coproc->c_flags & COPROC_DEAD)
+       {
+         coproc_list.ncoproc--;        /* keep running count, fix up pointers later */
+
+#if defined (DEBUG)
+         itrace("cpl_reap: deleting %d", p->coproc->c_pid);
+#endif
+
+         coproc_dispose (p->coproc);
+         cpe_dispose (p);
+       }
+      else if (nh == 0)
+       nh = nt = p;
+      else
+       {
+         nt->next = p;
+         nt = nt->next;
+       }
+    }
+
+  if (coproc_list.ncoproc == 0)
+    coproc_list.head = coproc_list.tail = 0;
+  else
+    {
+      if (nt)
+        nt->next = 0;
+      coproc_list.head = nh;
+      coproc_list.tail = nt;
+      if (coproc_list.ncoproc == 1)
+       coproc_list.tail = coproc_list.head;            /* just to make sure */  
+    }
+}
+
+/* Clear out the list of saved statuses */
+static void
+cpl_flush ()
+{
+  struct cpelement *cpe, *p;
+
+  for (cpe = coproc_list.head; cpe; )
+    {
+      p = cpe;
+      cpe = cpe->next;
+
+      coproc_dispose (p->coproc);
+      cpe_dispose (p);
+    }
+
+  coproc_list.head = coproc_list.tail = 0;
+  coproc_list.ncoproc = 0;
+}
+
+static void
+cpl_closeall ()
+{
+  struct cpelement *cpe;
+
+  for (cpe = coproc_list.head; cpe; cpe = cpe->next)
+    coproc_close (cpe->coproc);
+}
+
+static void
+cpl_fdchk (fd)
+     int fd;
+{
+  struct cpelement *cpe;
+
+  for (cpe = coproc_list.head; cpe; cpe = cpe->next)
+    coproc_checkfd (cpe->coproc, fd);
+}
+
+/* Search for PID in the list of coprocs; return the cpelement struct if
+   found.  If not found, return NULL. */
+static struct cpelement *
+cpl_search (pid)
+     pid_t pid;
+{
+  struct cpelement *cpe;
+
+  for (cpe = coproc_list.head ; cpe; cpe = cpe->next)
+    if (cpe->coproc->c_pid == pid)
+      return cpe;
+  return (struct cpelement *)NULL;
+}
+
+/* Search for the coproc named NAME in the list of coprocs; return the
+   cpelement struct if found.  If not found, return NULL. */
+static struct cpelement *
+cpl_searchbyname (name)
+     const char *name;
+{
+  struct cpelement *cp;
+
+  for (cp = coproc_list.head ; cp; cp = cp->next)
+    if (STREQ (cp->coproc->c_name, name))
+      return cp;
+  return (struct cpelement *)NULL;
+}
+
+#if 0
+static void
+cpl_prune ()
+{
+  struct cpelement *cp;
+
+  while (coproc_list.head && coproc_list.ncoproc > COPROC_MAX)
+    {
+      cp = coproc_list.head;
+      coproc_list.head = coproc_list.head->next;
+      coproc_dispose (cp->coproc);
+      cpe_dispose (cp);
+      coproc_list.ncoproc--;
+    }
+}
+#endif
+
+/* These currently use a single global "shell coproc" but are written in a
+   way to not preclude additional coprocs later (using the list management
+   package above). */
+
+struct coproc *
+getcoprocbypid (pid)
+     pid_t pid;
+{
+#if MULTIPLE_COPROCS
+  struct cpelement *p;
+
+  p = cpl_search (pid);
+  return (p ? p->coproc : 0);
+#else
+  return (pid == sh_coproc.c_pid ? &sh_coproc : 0);
+#endif
+}
+
+struct coproc *
+getcoprocbyname (name)
+     const char *name;
+{
+#if MULTIPLE_COPROCS
+  struct cpelement *p;
+
+  p = cpl_searchbyname (name);
+  return (p ? p->coproc : 0);
+#else
+  return ((sh_coproc.c_name && STREQ (sh_coproc.c_name, name)) ? &sh_coproc : 0);
+#endif
+}
+
+void
+coproc_init (cp)
+     struct coproc *cp;
+{
+  cp->c_name = 0;
+  cp->c_pid = NO_PID;
+  cp->c_rfd = cp->c_wfd = -1;
+  cp->c_rsave = cp->c_wsave = -1;
+  cp->c_flags = cp->c_status = cp->c_lock = 0;
+}
+
+struct coproc *
+coproc_alloc (name, pid)
+     char *name;
+     pid_t pid;
+{
+  struct coproc *cp;
+
+#if MULTIPLE_COPROCS
+  cp = (struct coproc *)xmalloc (sizeof (struct coproc));
+#else
+  cp = &sh_coproc;
+#endif
+  coproc_init (cp);
+  cp->c_lock = 2;
+
+  cp->c_pid = pid;
+  cp->c_name = savestring (name);
+#if MULTIPLE_COPROCS
+  cpl_add (cp);
+#endif
+  cp->c_lock = 0;
+  return (cp);
+}
+
+static void
+coproc_free (cp)
+     struct coproc *cp;
+{
+  free (cp);
+}
+
+void
+coproc_dispose (cp)
+     struct coproc *cp;
+{
+  sigset_t set, oset;
+
+  if (cp == 0)
+    return;
+
+  BLOCK_SIGNAL (SIGCHLD, set, oset);
+  cp->c_lock = 3;
+  coproc_unsetvars (cp);
+  FREE (cp->c_name);
+  coproc_close (cp);
+#if MULTIPLE_COPROCS
+  coproc_free (cp);
+#else
+  coproc_init (cp);
+  cp->c_lock = 0;
+#endif
+  UNBLOCK_SIGNAL (oset);
+}
+
+/* Placeholder for now.  Will require changes for multiple coprocs */
+void
+coproc_flush ()
+{
+#if MULTIPLE_COPROCS
+  cpl_flush ();
+#else
+  coproc_dispose (&sh_coproc);
+#endif
+}
+
+void
+coproc_close (cp)
+     struct coproc *cp;
+{
+  if (cp->c_rfd >= 0)
+    {
+      close (cp->c_rfd);
+      cp->c_rfd = -1;
+    }
+  if (cp->c_wfd >= 0)
+    {
+      close (cp->c_wfd);
+      cp->c_wfd = -1;
+    }
+  cp->c_rsave = cp->c_wsave = -1;
+}
+
+void
+coproc_closeall ()
+{
+#if MULTIPLE_COPROCS
+  cpl_closeall ();
+#else
+  coproc_close (&sh_coproc);   /* XXX - will require changes for multiple coprocs */
+#endif
+}
+
+void
+coproc_reap ()
+{
+#if MULTIPLE_COPROCS
+  cpl_reap ();
+#else
+  struct coproc *cp;
+
+  cp = &sh_coproc;             /* XXX - will require changes for multiple coprocs */
+  if (cp && (cp->c_flags & COPROC_DEAD))
+    coproc_dispose (cp);
+#endif
+}
+
+void
+coproc_rclose (cp, fd)
+     struct coproc *cp;
+     int fd;
+{
+  if (cp->c_rfd >= 0 && cp->c_rfd == fd)
+    {
+      close (cp->c_rfd);
+      cp->c_rfd = -1;
+    }
+}
+
+void
+coproc_wclose (cp, fd)
+     struct coproc *cp;
+     int fd;
+{
+  if (cp->c_wfd >= 0 && cp->c_wfd == fd)
+    {
+      close (cp->c_wfd);
+      cp->c_wfd = -1;
+    }
+}
+
+void
+coproc_checkfd (cp, fd)
+     struct coproc *cp;
+     int fd;
+{
+  int update;
+
+  update = 0;
+  if (cp->c_rfd >= 0 && cp->c_rfd == fd)
+    update = cp->c_rfd = -1;
+  if (cp->c_wfd >= 0 && cp->c_wfd == fd)
+    update = cp->c_wfd = -1;
+  if (update)
+    coproc_setvars (cp);
+}
+
+void
+coproc_fdchk (fd)
+     int fd;
+{
+#if MULTIPLE_COPROCS
+  cpl_fdchk (fd);
+#else
+  coproc_checkfd (&sh_coproc, fd);
+#endif
+}
+
+void
+coproc_fdclose (cp, fd)
+     struct coproc *cp;
+     int fd;
+{
+  coproc_rclose (cp, fd);
+  coproc_wclose (cp, fd);
+  coproc_setvars (cp);
+}
+
+void
+coproc_fdsave (cp)
+     struct coproc *cp;
+{
+  cp->c_rsave = cp->c_rfd;
+  cp->c_wsave = cp->c_wfd;
+}
+
+void
+coproc_fdrestore (cp)
+     struct coproc *cp;
+{
+  cp->c_rfd = cp->c_rsave;
+  cp->c_wfd = cp->c_wsave;
+}
+
+void
+coproc_pidchk (pid, status)
+     pid_t pid;
+{
+  struct coproc *cp;
+
+#if MULTIPLE_COPROCS
+  struct cpelement *cpe;
+
+  cpe = cpl_delete (pid);
+  cp = cpe ? cpe->coproc : 0;
+#else
+  cp = getcoprocbypid (pid);
+#endif
+  if (cp)
+    {
+      cp->c_lock = 4;
+      cp->c_status = status;
+      cp->c_flags |= COPROC_DEAD;
+      cp->c_flags &= ~COPROC_RUNNING;
+      /* Don't dispose the coproc or unset the COPROC_XXX variables because
+        this is executed in a signal handler context.  Wait until coproc_reap
+        takes care of it. */
+      cp->c_lock = 0;
+    }
+}
+
+void
+coproc_setvars (cp)
+     struct coproc *cp;
+{
+  SHELL_VAR *v;
+  char *namevar, *t;
+  int l;
+#if defined (ARRAY_VARS)
+  arrayind_t ind;
+#endif
+
+  if (cp->c_name == 0)
+    return;
+
+  l = strlen (cp->c_name);
+  namevar = xmalloc (l + 16);
+
+#if defined (ARRAY_VARS)
+  v = find_variable (cp->c_name);
+  if (v == 0)
+    v = make_new_array_variable (cp->c_name);
+  if (array_p (v) == 0)
+    v = convert_var_to_array (v);
+
+  t = itos (cp->c_rfd);
+  ind = 0;
+  v = bind_array_variable (cp->c_name, ind, t, 0);
+  free (t);
+
+  t = itos (cp->c_wfd);
+  ind = 1;
+  bind_array_variable (cp->c_name, ind, t, 0);
+  free (t);
+#else
+  sprintf (namevar, "%s_READ", cp->c_name);
+  t = itos (cp->c_rfd);
+  bind_variable (namevar, t, 0);
+  free (t);
+  sprintf (namevar, "%s_WRITE", cp->c_name);
+  t = itos (cp->c_wfd);
+  bind_variable (namevar, t, 0);
+  free (t);
+#endif
+
+  sprintf (namevar, "%s_PID", cp->c_name);
+  t = itos (cp->c_pid);
+  bind_variable (namevar, t, 0);
+  free (t);
+
+  free (namevar);
+}
+
+void
+coproc_unsetvars (cp)
+     struct coproc *cp;
+{
+  int l;
+  char *namevar;
+
+  if (cp->c_name == 0)
+    return;
+
+  l = strlen (cp->c_name);
+  namevar = xmalloc (l + 16);
+
+  sprintf (namevar, "%s_PID", cp->c_name);
+  unbind_variable (namevar);  
+
+#if defined (ARRAY_VARS)
+  unbind_variable (cp->c_name);
+#else
+  sprintf (namevar, "%s_READ", cp->c_name);
+  unbind_variable (namevar);
+  sprintf (namevar, "%s_WRITE", cp->c_name);
+  unbind_variable (namevar);
+#endif  
+
+  free (namevar);
+}
+
+static int
+execute_coproc (command, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int rpipe[2], wpipe[2], estat, invert;
+  pid_t coproc_pid;
+  Coproc *cp;
+  char *tcmd;
+  sigset_t set, oset;
+
+  /* XXX -- can be removed after changes to handle multiple coprocs */
+#if !MULTIPLE_COPROCS
+  if (sh_coproc.c_pid != NO_PID)
+    internal_warning ("execute_coproc: coproc [%d:%s] still exists", sh_coproc.c_pid, sh_coproc.c_name);
+  coproc_init (&sh_coproc);
+#endif
+
+  invert = (command->flags & CMD_INVERT_RETURN) != 0;
+  command_string_index = 0;
+  tcmd = make_command_string (command);
+
+  sh_openpipe ((int *)&rpipe); /* 0 = parent read, 1 = child write */
+  sh_openpipe ((int *)&wpipe); /* 0 = child read, 1 = parent write */
+
+  BLOCK_SIGNAL (SIGCHLD, set, oset);
+
+  coproc_pid = make_child (savestring (tcmd), 1);
+
+  if (coproc_pid == 0)
+    {
+      close (rpipe[0]);
+      close (wpipe[1]);
+
+      UNBLOCK_SIGNAL (oset);
+      estat = execute_in_subshell (command, 1, wpipe[0], rpipe[1], fds_to_close);
+
+      fflush (stdout);
+      fflush (stderr);
+
+      exit (estat);
+    }
+
+  close (rpipe[1]);
+  close (wpipe[0]);
+
+  /* XXX - possibly run Coproc->name through word expansion? */
+  cp = coproc_alloc (command->value.Coproc->name, coproc_pid);
+  cp->c_rfd = rpipe[0];
+  cp->c_wfd = wpipe[1];
+
+  SET_CLOSE_ON_EXEC (cp->c_rfd);
+  SET_CLOSE_ON_EXEC (cp->c_wfd);
+
+  coproc_setvars (cp);
+
+  UNBLOCK_SIGNAL (oset);
+
+#if 0
+  itrace ("execute_coproc: [%d] %s", coproc_pid, the_printed_command);
+#endif
+
+  close_pipes (pipe_in, pipe_out);
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+  unlink_fifo_list ();
+#endif
+  stop_pipeline (1, (COMMAND *)NULL);
+  DESCRIBE_PID (coproc_pid);
+  run_pending_traps ();
+
+  return (invert ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+#endif
+
+static void
+restore_stdin (s)
+     int s;
+{
+  dup2 (s, 0);
+  close (s);
+}
+
+/* Catch-all cleanup function for lastpipe code for unwind-protects */
+static void
+lastpipe_cleanup (s)
+     int s;
+{
+  unfreeze_jobs_list ();
+}
+
+static int
+execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous, pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  int prev, fildes[2], new_bitmap_size, dummyfd, ignore_return, exec_result;
+  int lstdin, lastpipe_flag, lastpipe_jid;
+  COMMAND *cmd;
+  struct fd_bitmap *fd_bitmap;
+  pid_t lastpid;
+
+#if defined (JOB_CONTROL)
+  sigset_t set, oset;
+  BLOCK_CHILD (set, oset);
+#endif /* JOB_CONTROL */
+
+  ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+  prev = pipe_in;
+  cmd = command;
+
+  while (cmd && cmd->type == cm_connection &&
+        cmd->value.Connection && cmd->value.Connection->connector == '|')
+    {
+      /* Make a pipeline between the two commands. */
+      if (pipe (fildes) < 0)
+       {
+         sys_error (_("pipe error"));
+#if defined (JOB_CONTROL)
+         terminate_current_pipeline ();
+         kill_current_pipeline ();
+         UNBLOCK_CHILD (oset);
+#endif /* JOB_CONTROL */
+         last_command_exit_value = EXECUTION_FAILURE;
+         /* The unwind-protects installed below will take care
+            of closing all of the open file descriptors. */
+         throw_to_top_level ();
+         return (EXECUTION_FAILURE);   /* XXX */
+       }
+
+      /* Here is a problem: with the new file close-on-exec
+        code, the read end of the pipe (fildes[0]) stays open
+        in the first process, so that process will never get a
+        SIGPIPE.  There is no way to signal the first process
+        that it should close fildes[0] after forking, so it
+        remains open.  No SIGPIPE is ever sent because there
+        is still a file descriptor open for reading connected
+        to the pipe.  We take care of that here.  This passes
+        around a bitmap of file descriptors that must be
+        closed after making a child process in execute_simple_command. */
+
+      /* We need fd_bitmap to be at least as big as fildes[0].
+        If fildes[0] is less than fds_to_close->size, then
+        use fds_to_close->size. */
+      new_bitmap_size = (fildes[0] < fds_to_close->size)
+                               ? fds_to_close->size
+                               : fildes[0] + 8;
+
+      fd_bitmap = new_fd_bitmap (new_bitmap_size);
+
+      /* Now copy the old information into the new bitmap. */
+      xbcopy ((char *)fds_to_close->bitmap, (char *)fd_bitmap->bitmap, fds_to_close->size);
+
+      /* And mark the pipe file descriptors to be closed. */
+      fd_bitmap->bitmap[fildes[0]] = 1;
+
+      /* In case there are pipe or out-of-processes errors, we
+        want all these file descriptors to be closed when
+        unwind-protects are run, and the storage used for the
+        bitmaps freed up. */
+      begin_unwind_frame ("pipe-file-descriptors");
+      add_unwind_protect (dispose_fd_bitmap, fd_bitmap);
+      add_unwind_protect (close_fd_bitmap, fd_bitmap);
+      if (prev >= 0)
+       add_unwind_protect (close, prev);
+      dummyfd = fildes[1];
+      add_unwind_protect (close, dummyfd);
+
+#if defined (JOB_CONTROL)
+      add_unwind_protect (restore_signal_mask, &oset);
+#endif /* JOB_CONTROL */
+
+      if (ignore_return && cmd->value.Connection->first)
+       cmd->value.Connection->first->flags |= CMD_IGNORE_RETURN;
+      execute_command_internal (cmd->value.Connection->first, asynchronous,
+                               prev, fildes[1], fd_bitmap);
+
+      if (prev >= 0)
+       close (prev);
+
+      prev = fildes[0];
+      close (fildes[1]);
+
+      dispose_fd_bitmap (fd_bitmap);
+      discard_unwind_frame ("pipe-file-descriptors");
+
+      cmd = cmd->value.Connection->second;
+    }
+
+  lastpid = last_made_pid;
+
+  /* Now execute the rightmost command in the pipeline.  */
+  if (ignore_return && cmd)
+    cmd->flags |= CMD_IGNORE_RETURN;
+
+  lastpipe_flag = 0;
+
+  begin_unwind_frame ("lastpipe-exec");
+  lstdin = -1;
+  /* If the `lastpipe' option is set with shopt, and job control is not
+     enabled, execute the last element of non-async pipelines in the
+     current shell environment. */
+  if (lastpipe_opt && job_control == 0 && asynchronous == 0 && pipe_out == NO_PIPE && prev > 0)
+    {
+      lstdin = move_to_high_fd (0, 1, -1);
+      if (lstdin > 0)
+       {
+         do_piping (prev, pipe_out);
+         prev = NO_PIPE;
+         add_unwind_protect (restore_stdin, lstdin);
+         lastpipe_flag = 1;
+         freeze_jobs_list ();
+         lastpipe_jid = stop_pipeline (0, (COMMAND *)NULL);    /* XXX */
+         add_unwind_protect (lastpipe_cleanup, lastpipe_jid);
+       }
+      if (cmd)
+       cmd->flags |= CMD_LASTPIPE;
+    }    
+  if (prev >= 0)
+    add_unwind_protect (close, prev);
+
+  exec_result = execute_command_internal (cmd, asynchronous, prev, pipe_out, fds_to_close);
+
+  if (lstdin > 0)
+    restore_stdin (lstdin);
+
+  if (prev >= 0)
+    close (prev);
+
+#if defined (JOB_CONTROL)
+  UNBLOCK_CHILD (oset);
+#endif
+
+  QUIT;
+
+  if (lastpipe_flag)
+    {
+#if defined (JOB_CONTROL)
+      append_process (savestring (the_printed_command), dollar_dollar_pid, exec_result, lastpipe_jid);
+#endif
+      lstdin = wait_for (lastpid);
+#if defined (JOB_CONTROL)
+      exec_result = job_exit_status (lastpipe_jid);
+#endif
+      unfreeze_jobs_list ();
+    }
+
+  discard_unwind_frame ("lastpipe-exec");
+
+  return (exec_result);
+}
+
+static int
+execute_connection (command, asynchronous, pipe_in, pipe_out, fds_to_close)
+     COMMAND *command;
+     int asynchronous, pipe_in, pipe_out;
+     struct fd_bitmap *fds_to_close;
+{
+  COMMAND *tc, *second;
+  int ignore_return, exec_result, was_error_trap, invert;
+  volatile int save_line_number;
+
+  ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+  switch (command->value.Connection->connector)
+    {
+    /* Do the first command asynchronously. */
+    case '&':
+      tc = command->value.Connection->first;
+      if (tc == 0)
+       return (EXECUTION_SUCCESS);
+
+      if (ignore_return)
+       tc->flags |= CMD_IGNORE_RETURN;
+      tc->flags |= CMD_AMPERSAND;
+
+      /* If this shell was compiled without job control support,
+        if we are currently in a subshell via `( xxx )', or if job
+        control is not active then the standard input for an
+        asynchronous command is forced to /dev/null. */
+#if defined (JOB_CONTROL)
+      if ((subshell_environment || !job_control) && !stdin_redir)
+#else
+      if (!stdin_redir)
+#endif /* JOB_CONTROL */
+       tc->flags |= CMD_STDIN_REDIR;
+
+      exec_result = execute_command_internal (tc, 1, pipe_in, pipe_out, fds_to_close);
+      QUIT;
+
+      if (tc->flags & CMD_STDIN_REDIR)
+       tc->flags &= ~CMD_STDIN_REDIR;
+
+      second = command->value.Connection->second;
+      if (second)
+       {
+         if (ignore_return)
+           second->flags |= CMD_IGNORE_RETURN;
+
+         exec_result = execute_command_internal (second, asynchronous, pipe_in, pipe_out, fds_to_close);
+       }
+
+      break;
+
+    /* Just call execute command on both sides. */
+    case ';':
+      if (ignore_return)
+       {
+         if (command->value.Connection->first)
+           command->value.Connection->first->flags |= CMD_IGNORE_RETURN;
+         if (command->value.Connection->second)
+           command->value.Connection->second->flags |= CMD_IGNORE_RETURN;
+       }
+      executing_list++;
+      QUIT;
+      execute_command (command->value.Connection->first);
+      QUIT;
+      exec_result = execute_command_internal (command->value.Connection->second,
+                                     asynchronous, pipe_in, pipe_out,
+                                     fds_to_close);
+      executing_list--;
+      break;
+
+    case '|':
+      was_error_trap = signal_is_trapped (ERROR_TRAP) && signal_is_ignored (ERROR_TRAP) == 0;
+      invert = (command->flags & CMD_INVERT_RETURN) != 0;
+      ignore_return = (command->flags & CMD_IGNORE_RETURN) != 0;
+
+      line_number_for_err_trap = line_number;
+      exec_result = execute_pipeline (command, asynchronous, pipe_in, pipe_out, fds_to_close);
+
+      if (was_error_trap && ignore_return == 0 && invert == 0 && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         save_line_number = line_number;
+         line_number = line_number_for_err_trap;
+         run_error_trap ();
+         line_number = save_line_number;
+       }
+
+      if (ignore_return == 0 && invert == 0 && exit_immediately_on_error && exec_result != EXECUTION_SUCCESS)
+       {
+         last_command_exit_value = exec_result;
+         run_pending_traps ();
+         jump_to_top_level (ERREXIT);
+       }
+
+      break;
+
+    case AND_AND:
+    case OR_OR:
+      if (asynchronous)
+       {
+         /* If we have something like `a && b &' or `a || b &', run the
+            && or || stuff in a subshell.  Force a subshell and just call
+            execute_command_internal again.  Leave asynchronous on
+            so that we get a report from the parent shell about the
+            background job. */
+         command->flags |= CMD_FORCE_SUBSHELL;
+         exec_result = execute_command_internal (command, 1, pipe_in, pipe_out, fds_to_close);
+         break;
+       }
+
+      /* Execute the first command.  If the result of that is successful
+        and the connector is AND_AND, or the result is not successful
+        and the connector is OR_OR, then execute the second command,
+        otherwise return. */
+
+      executing_list++;
+      if (command->value.Connection->first)
+       command->value.Connection->first->flags |= CMD_IGNORE_RETURN;
+
+      exec_result = execute_command (command->value.Connection->first);
+      QUIT;
+      if (((command->value.Connection->connector == AND_AND) &&
+          (exec_result == EXECUTION_SUCCESS)) ||
+         ((command->value.Connection->connector == OR_OR) &&
+          (exec_result != EXECUTION_SUCCESS)))
+       {
+         if (ignore_return && command->value.Connection->second)
+           command->value.Connection->second->flags |= CMD_IGNORE_RETURN;
+
+         exec_result = execute_command (command->value.Connection->second);
+       }
+      executing_list--;
+      break;
+
+    default:
+      command_error ("execute_connection", CMDERR_BADCONN, command->value.Connection->connector, 0);
+      jump_to_top_level (DISCARD);
+      exec_result = EXECUTION_FAILURE;
+    }
+
+  return exec_result;
+}
+
+#define REAP() \
+  do \
+    { \
+      if (!interactive_shell) \
+       reap_dead_jobs (); \
+    } \
+  while (0)
+
+/* Execute a FOR command.  The syntax is: FOR word_desc IN word_list;
+   DO command; DONE */
+static int
+execute_for_command (for_command)
+     FOR_COM *for_command;
+{
+  register WORD_LIST *releaser, *list;
+  SHELL_VAR *v;
+  char *identifier;
+  int retval, save_line_number;
+#if 0
+  SHELL_VAR *old_value = (SHELL_VAR *)NULL; /* Remember the old value of x. */
+#endif
+
+  save_line_number = line_number;
+  if (check_identifier (for_command->name, 1) == 0)
+    {
+      if (posixly_correct && interactive_shell == 0)
+       {
+         last_command_exit_value = EX_BADUSAGE;
+         jump_to_top_level (ERREXIT);
+       }
+      return (EXECUTION_FAILURE);
+    }
+
+  loop_level++;
+  identifier = for_command->name->word;
+
+  line_number = for_command->line;     /* for expansion error messages */
+  list = releaser = expand_words_no_vars (for_command->map_list);
+
+  begin_unwind_frame ("for");
+  add_unwind_protect (dispose_words, releaser);
+
+#if 0
+  if (lexical_scoping)
+    {
+      old_value = copy_variable (find_variable (identifier));
+      if (old_value)
+       add_unwind_protect (dispose_variable, old_value);
+    }
+#endif
+
+  if (for_command->flags & CMD_IGNORE_RETURN)
+    for_command->action->flags |= CMD_IGNORE_RETURN;
+
+  for (retval = EXECUTION_SUCCESS; list; list = list->next)
+    {
+      QUIT;
+
+      line_number = for_command->line;
+
+      /* Remember what this command looks like, for debugger. */
+      command_string_index = 0;
+      print_for_command_head (for_command);
+
+      if (echo_command_at_execute)
+       xtrace_print_for_command_head (for_command);
+
+      /* Save this command unless it's a trap command and we're not running
+        a debug trap. */
+      if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+       {
+         FREE (the_printed_command_except_trap);
+         the_printed_command_except_trap = savestring (the_printed_command);
+       }
+
+      retval = run_debug_trap ();
+#if defined (DEBUGGER)
+      /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+        skip the command. */
+      if (debugging_mode && retval != EXECUTION_SUCCESS)
+        continue;
+#endif
+
+      this_command_name = (char *)NULL;
+      /* XXX - special ksh93 for command index variable handling */
+      v = find_variable_last_nameref (identifier);
+      if (v && nameref_p (v))
+        {
+          v = bind_variable_value (v, list->word->word, 0);
+        }
+      else
+        v = bind_variable (identifier, list->word->word, 0);
+      if (readonly_p (v) || noassign_p (v))
+       {
+         line_number = save_line_number;
+         if (readonly_p (v) && interactive_shell == 0 && posixly_correct)
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+             jump_to_top_level (FORCE_EOF);
+           }
+         else
+           {
+             dispose_words (releaser);
+             discard_unwind_frame ("for");
+             loop_level--;
+             return (EXECUTION_FAILURE);
+           }
+       }
+      retval = execute_command (for_command->action);
+      REAP ();
+      QUIT;
+
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+    }
+
+  loop_level--;
+  line_number = save_line_number;
+
+#if 0
+  if (lexical_scoping)
+    {
+      if (!old_value)
+        unbind_variable (identifier);
+      else
+       {
+         SHELL_VAR *new_value;
+
+         new_value = bind_variable (identifier, value_cell(old_value), 0);
+         new_value->attributes = old_value->attributes;
+         dispose_variable (old_value);
+       }
+    }
+#endif
+
+  dispose_words (releaser);
+  discard_unwind_frame ("for");
+  return (retval);
+}
+
+#if defined (ARITH_FOR_COMMAND)
+/* Execute an arithmetic for command.  The syntax is
+
+       for (( init ; step ; test ))
+       do
+               body
+       done
+
+   The execution should be exactly equivalent to
+
+       eval \(\( init \)\)
+       while eval \(\( test \)\) ; do
+               body;
+               eval \(\( step \)\)
+       done
+*/
+static intmax_t
+eval_arith_for_expr (l, okp)
+     WORD_LIST *l;
+     int *okp;
+{
+  WORD_LIST *new;
+  intmax_t expresult;
+  int r;
+
+  new = expand_words_no_vars (l);
+  if (new)
+    {
+      if (echo_command_at_execute)
+       xtrace_print_arith_cmd (new);
+      this_command_name = "((";                /* )) for expression error messages */
+
+      command_string_index = 0;
+      print_arith_command (new);
+      if (signal_in_progress (DEBUG_TRAP) == 0)
+       {
+         FREE (the_printed_command_except_trap);
+         the_printed_command_except_trap = savestring (the_printed_command);
+       }
+
+      r = run_debug_trap ();
+      /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+        skip the command. */
+#if defined (DEBUGGER)
+      if (debugging_mode == 0 || r == EXECUTION_SUCCESS)
+       expresult = evalexp (new->word->word, okp);
+      else
+       {
+         expresult = 0;
+         if (okp)
+           *okp = 1;
+       }
+#else
+      expresult = evalexp (new->word->word, okp);
+#endif
+      dispose_words (new);
+    }
+  else
+    {
+      expresult = 0;
+      if (okp)
+       *okp = 1;
+    }
+  return (expresult);
+}
+
+static int
+execute_arith_for_command (arith_for_command)
+     ARITH_FOR_COM *arith_for_command;
+{
+  intmax_t expresult;
+  int expok, body_status, arith_lineno, save_lineno;
+
+  body_status = EXECUTION_SUCCESS;
+  loop_level++;
+  save_lineno = line_number;
+
+  if (arith_for_command->flags & CMD_IGNORE_RETURN)
+    arith_for_command->action->flags |= CMD_IGNORE_RETURN;
+
+  this_command_name = "((";    /* )) for expression error messages */
+
+  /* save the starting line number of the command so we can reset
+     line_number before executing each expression -- for $LINENO
+     and the DEBUG trap. */
+  line_number = arith_lineno = arith_for_command->line;
+  if (variable_context && interactive_shell)
+    line_number -= function_line_number;
+
+  /* Evaluate the initialization expression. */
+  expresult = eval_arith_for_expr (arith_for_command->init, &expok);
+  if (expok == 0)
+    {
+      line_number = save_lineno;
+      return (EXECUTION_FAILURE);
+    }
+
+  while (1)
+    {
+      /* Evaluate the test expression. */
+      line_number = arith_lineno;
+      expresult = eval_arith_for_expr (arith_for_command->test, &expok);
+      line_number = save_lineno;
+
+      if (expok == 0)
+       {
+         body_status = EXECUTION_FAILURE;
+         break;
+       }
+      REAP ();
+      if (expresult == 0)
+       break;
+
+      /* Execute the body of the arithmetic for command. */
+      QUIT;
+      body_status = execute_command (arith_for_command->action);
+      QUIT;
+
+      /* Handle any `break' or `continue' commands executed by the body. */
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+
+      /* Evaluate the step expression. */
+      line_number = arith_lineno;
+      expresult = eval_arith_for_expr (arith_for_command->step, &expok);
+      line_number = save_lineno;
+
+      if (expok == 0)
+       {
+         body_status = EXECUTION_FAILURE;
+         break;
+       }
+    }
+
+  loop_level--;
+  line_number = save_lineno;
+
+  return (body_status);
+}
+#endif
+
+#if defined (SELECT_COMMAND)
+static int LINES, COLS, tabsize;
+
+#define RP_SPACE ") "
+#define RP_SPACE_LEN 2
+
+/* XXX - does not handle numbers > 1000000 at all. */
+#define NUMBER_LEN(s) \
+((s < 10) ? 1 \
+         : ((s < 100) ? 2 \
+                     : ((s < 1000) ? 3 \
+                                  : ((s < 10000) ? 4 \
+                                                : ((s < 100000) ? 5 \
+                                                               : 6)))))
+
+static int
+displen (s)
+     const char *s;
+{
+#if defined (HANDLE_MULTIBYTE)
+  wchar_t *wcstr;
+  size_t slen;
+  int wclen;
+
+  wcstr = 0;
+  slen = mbstowcs (wcstr, s, 0);
+  if (slen == -1)
+    slen = 0;
+  wcstr = (wchar_t *)xmalloc (sizeof (wchar_t) * (slen + 1));
+  mbstowcs (wcstr, s, slen + 1);
+  wclen = wcswidth (wcstr, slen);
+  free (wcstr);
+  return (wclen < 0 ? STRLEN(s) : wclen);
+#else
+  return (STRLEN (s));
+#endif
+}
+
+static int
+print_index_and_element (len, ind, list)
+      int len, ind;
+      WORD_LIST *list;
+{
+  register WORD_LIST *l;
+  register int i;
+
+  if (list == 0)
+    return (0);
+  for (i = ind, l = list; l && --i; l = l->next)
+    ;
+  if (l == 0)          /* don't think this can happen */
+    return (0);
+  fprintf (stderr, "%*d%s%s", len, ind, RP_SPACE, l->word->word);
+  return (displen (l->word->word));
+}
+
+static void
+indent (from, to)
+     int from, to;
+{
+  while (from < to)
+    {
+      if ((to / tabsize) > (from / tabsize))
+       {
+         putc ('\t', stderr);
+         from += tabsize - from % tabsize;
+       }
+      else
+       {
+         putc (' ', stderr);
+         from++;
+       }
+    }
+}
+
+static void
+print_select_list (list, list_len, max_elem_len, indices_len)
+     WORD_LIST *list;
+     int list_len, max_elem_len, indices_len;
+{
+  int ind, row, elem_len, pos, cols, rows;
+  int first_column_indices_len, other_indices_len;
+
+  if (list == 0)
+    {
+      putc ('\n', stderr);
+      return;
+    }
+
+  cols = max_elem_len ? COLS / max_elem_len : 1;
+  if (cols == 0)
+    cols = 1;
+  rows = list_len ? list_len / cols + (list_len % cols != 0) : 1;
+  cols = list_len ? list_len / rows + (list_len % rows != 0) : 1;
+
+  if (rows == 1)
+    {
+      rows = cols;
+      cols = 1;
+    }
+
+  first_column_indices_len = NUMBER_LEN (rows);
+  other_indices_len = indices_len;
+
+  for (row = 0; row < rows; row++)
+    {
+      ind = row;
+      pos = 0;
+      while (1)
+       {
+         indices_len = (pos == 0) ? first_column_indices_len : other_indices_len;
+         elem_len = print_index_and_element (indices_len, ind + 1, list);
+         elem_len += indices_len + RP_SPACE_LEN;
+         ind += rows;
+         if (ind >= list_len)
+           break;
+         indent (pos + elem_len, pos + max_elem_len);
+         pos += max_elem_len;
+       }
+      putc ('\n', stderr);
+    }
+}
+
+/* Print the elements of LIST, one per line, preceded by an index from 1 to
+   LIST_LEN.  Then display PROMPT and wait for the user to enter a number.
+   If the number is between 1 and LIST_LEN, return that selection.  If EOF
+   is read, return a null string.  If a blank line is entered, or an invalid
+   number is entered, the loop is executed again. */
+static char *
+select_query (list, list_len, prompt, print_menu)
+     WORD_LIST *list;
+     int list_len;
+     char *prompt;
+     int print_menu;
+{
+  int max_elem_len, indices_len, len;
+  intmax_t reply;
+  WORD_LIST *l;
+  char *repl_string, *t;
+
+#if 0
+  t = get_string_value ("LINES");
+  LINES = (t && *t) ? atoi (t) : 24;
+#endif
+  t = get_string_value ("COLUMNS");
+  COLS =  (t && *t) ? atoi (t) : 80;
+
+#if 0
+  t = get_string_value ("TABSIZE");
+  tabsize = (t && *t) ? atoi (t) : 8;
+  if (tabsize <= 0)
+    tabsize = 8;
+#else
+  tabsize = 8;
+#endif
+
+  max_elem_len = 0;
+  for (l = list; l; l = l->next)
+    {
+      len = displen (l->word->word);
+      if (len > max_elem_len)
+       max_elem_len = len;
+    }
+  indices_len = NUMBER_LEN (list_len);
+  max_elem_len += indices_len + RP_SPACE_LEN + 2;
+
+  while (1)
+    {
+      if (print_menu)
+       print_select_list (list, list_len, max_elem_len, indices_len);
+      fprintf (stderr, "%s", prompt);
+      fflush (stderr);
+      QUIT;
+
+      if (read_builtin ((WORD_LIST *)NULL) != EXECUTION_SUCCESS)
+       {
+         putchar ('\n');
+         return ((char *)NULL);
+       }
+      repl_string = get_string_value ("REPLY");
+      if (*repl_string == 0)
+       {
+         print_menu = 1;
+         continue;
+       }
+      if (legal_number (repl_string, &reply) == 0)
+       return "";
+      if (reply < 1 || reply > list_len)
+       return "";
+
+      for (l = list; l && --reply; l = l->next)
+       ;
+      return (l->word->word);          /* XXX - can't be null? */
+    }
+}
+
+/* Execute a SELECT command.  The syntax is:
+   SELECT word IN list DO command_list DONE
+   Only `break' or `return' in command_list will terminate
+   the command. */
+static int
+execute_select_command (select_command)
+     SELECT_COM *select_command;
+{
+  WORD_LIST *releaser, *list;
+  SHELL_VAR *v;
+  char *identifier, *ps3_prompt, *selection;
+  int retval, list_len, show_menu, save_line_number;
+
+  if (check_identifier (select_command->name, 1) == 0)
+    return (EXECUTION_FAILURE);
+
+  save_line_number = line_number;
+  line_number = select_command->line;
+
+  command_string_index = 0;
+  print_select_command_head (select_command);
+
+  if (echo_command_at_execute)
+    xtrace_print_select_command_head (select_command);
+
+#if 0
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+#else
+  if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+#endif
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  retval = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    return (EXECUTION_SUCCESS);
+#endif
+
+  loop_level++;
+  identifier = select_command->name->word;
+
+  /* command and arithmetic substitution, parameter and variable expansion,
+     word splitting, pathname expansion, and quote removal. */
+  list = releaser = expand_words_no_vars (select_command->map_list);
+  list_len = list_length (list);
+  if (list == 0 || list_len == 0)
+    {
+      if (list)
+       dispose_words (list);
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+
+  begin_unwind_frame ("select");
+  add_unwind_protect (dispose_words, releaser);
+
+  if (select_command->flags & CMD_IGNORE_RETURN)
+    select_command->action->flags |= CMD_IGNORE_RETURN;
+
+  retval = EXECUTION_SUCCESS;
+  show_menu = 1;
+
+  while (1)
+    {
+      line_number = select_command->line;
+      ps3_prompt = get_string_value ("PS3");
+      if (ps3_prompt == 0)
+       ps3_prompt = "#? ";
+
+      QUIT;
+      selection = select_query (list, list_len, ps3_prompt, show_menu);
+      QUIT;
+      if (selection == 0)
+       {
+         /* select_query returns EXECUTION_FAILURE if the read builtin
+            fails, so we want to return failure in this case. */
+         retval = EXECUTION_FAILURE;
+         break;
+       }
+
+      v = bind_variable (identifier, selection, 0);
+      if (readonly_p (v) || noassign_p (v))
+       {
+         if (readonly_p (v) && interactive_shell == 0 && posixly_correct)
+           {
+             last_command_exit_value = EXECUTION_FAILURE;
+             jump_to_top_level (FORCE_EOF);
+           }
+         else
+           {
+             dispose_words (releaser);
+             discard_unwind_frame ("select");
+             loop_level--;
+             line_number = save_line_number;
+             return (EXECUTION_FAILURE);
+           }
+       }
+
+      retval = execute_command (select_command->action);
+
+      REAP ();
+      QUIT;
+
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+
+#if defined (KSH_COMPATIBLE_SELECT)
+      show_menu = 0;
+      selection = get_string_value ("REPLY");
+      if (selection && *selection == '\0')
+        show_menu = 1;
+#endif
+    }
+
+  loop_level--;
+  line_number = save_line_number;
+
+  dispose_words (releaser);
+  discard_unwind_frame ("select");
+  return (retval);
+}
+#endif /* SELECT_COMMAND */
+
+/* Execute a CASE command.  The syntax is: CASE word_desc IN pattern_list ESAC.
+   The pattern_list is a linked list of pattern clauses; each clause contains
+   some patterns to compare word_desc against, and an associated command to
+   execute. */
+static int
+execute_case_command (case_command)
+     CASE_COM *case_command;
+{
+  register WORD_LIST *list;
+  WORD_LIST *wlist, *es;
+  PATTERN_LIST *clauses;
+  char *word, *pattern;
+  int retval, match, ignore_return, save_line_number;
+
+  save_line_number = line_number;
+  line_number = case_command->line;
+
+  command_string_index = 0;
+  print_case_command_head (case_command);
+
+  if (echo_command_at_execute)
+    xtrace_print_case_command_head (case_command);
+
+#if 0
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+#else
+  if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+#endif
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  retval = run_debug_trap();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    {
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+#endif
+
+  wlist = expand_word_unsplit (case_command->word, 0);
+  word = wlist ? string_list (wlist) : savestring ("");
+  dispose_words (wlist);
+
+  retval = EXECUTION_SUCCESS;
+  ignore_return = case_command->flags & CMD_IGNORE_RETURN;
+
+  begin_unwind_frame ("case");
+  add_unwind_protect ((Function *)xfree, word);
+
+#define EXIT_CASE()  goto exit_case_command
+
+  for (clauses = case_command->clauses; clauses; clauses = clauses->next)
+    {
+      QUIT;
+      for (list = clauses->patterns; list; list = list->next)
+       {
+         es = expand_word_leave_quoted (list->word, 0);
+
+         if (es && es->word && es->word->word && *(es->word->word))
+           pattern = quote_string_for_globbing (es->word->word, QGLOB_CVTNULL);
+         else
+           {
+             pattern = (char *)xmalloc (1);
+             pattern[0] = '\0';
+           }
+
+         /* Since the pattern does not undergo quote removal (as per
+            Posix.2, section 3.9.4.3), the strmatch () call must be able
+            to recognize backslashes as escape characters. */
+         match = strmatch (pattern, word, FNMATCH_EXTFLAG|FNMATCH_IGNCASE) != FNM_NOMATCH;
+         free (pattern);
+
+         dispose_words (es);
+
+         if (match)
+           {
+             do
+               {
+                 if (clauses->action && ignore_return)
+                   clauses->action->flags |= CMD_IGNORE_RETURN;
+                 retval = execute_command (clauses->action);
+               }
+             while ((clauses->flags & CASEPAT_FALLTHROUGH) && (clauses = clauses->next));
+             if (clauses == 0 || (clauses->flags & CASEPAT_TESTNEXT) == 0)
+               EXIT_CASE ();
+             else
+               break;
+           }
+
+         QUIT;
+       }
+    }
+
+exit_case_command:
+  free (word);
+  discard_unwind_frame ("case");
+  line_number = save_line_number;
+  return (retval);
+}
+
+#define CMD_WHILE 0
+#define CMD_UNTIL 1
+
+/* The WHILE command.  Syntax: WHILE test DO action; DONE.
+   Repeatedly execute action while executing test produces
+   EXECUTION_SUCCESS. */
+static int
+execute_while_command (while_command)
+     WHILE_COM *while_command;
+{
+  return (execute_while_or_until (while_command, CMD_WHILE));
+}
+
+/* UNTIL is just like WHILE except that the test result is negated. */
+static int
+execute_until_command (while_command)
+     WHILE_COM *while_command;
+{
+  return (execute_while_or_until (while_command, CMD_UNTIL));
+}
+
+/* The body for both while and until.  The only difference between the
+   two is that the test value is treated differently.  TYPE is
+   CMD_WHILE or CMD_UNTIL.  The return value for both commands should
+   be EXECUTION_SUCCESS if no commands in the body are executed, and
+   the status of the last command executed in the body otherwise. */
+static int
+execute_while_or_until (while_command, type)
+     WHILE_COM *while_command;
+     int type;
+{
+  int return_value, body_status;
+
+  body_status = EXECUTION_SUCCESS;
+  loop_level++;
+
+  while_command->test->flags |= CMD_IGNORE_RETURN;
+  if (while_command->flags & CMD_IGNORE_RETURN)
+    while_command->action->flags |= CMD_IGNORE_RETURN;
+
+  while (1)
+    {
+      return_value = execute_command (while_command->test);
+      REAP ();
+
+      /* Need to handle `break' in the test when we would break out of the
+         loop.  The job control code will set `breaking' to loop_level
+         when a job in a loop is stopped with SIGTSTP.  If the stopped job
+         is in the loop test, `breaking' will not be reset unless we do
+         this, and the shell will cease to execute commands. */
+      if (type == CMD_WHILE && return_value != EXECUTION_SUCCESS)
+       {
+         if (breaking)
+           breaking--;
+         break;
+       }
+      if (type == CMD_UNTIL && return_value == EXECUTION_SUCCESS)
+       {
+         if (breaking)
+           breaking--;
+         break;
+       }
+
+      QUIT;
+      body_status = execute_command (while_command->action);
+      QUIT;
+
+      if (breaking)
+       {
+         breaking--;
+         break;
+       }
+
+      if (continuing)
+       {
+         continuing--;
+         if (continuing)
+           break;
+       }
+    }
+  loop_level--;
+
+  return (body_status);
+}
+
+/* IF test THEN command [ELSE command].
+   IF also allows ELIF in the place of ELSE IF, but
+   the parser makes *that* stupidity transparent. */
+static int
+execute_if_command (if_command)
+     IF_COM *if_command;
+{
+  int return_value, save_line_number;
+
+  save_line_number = line_number;
+  if_command->test->flags |= CMD_IGNORE_RETURN;
+  return_value = execute_command (if_command->test);
+  line_number = save_line_number;
+
+  if (return_value == EXECUTION_SUCCESS)
+    {
+      QUIT;
+
+      if (if_command->true_case && (if_command->flags & CMD_IGNORE_RETURN))
+       if_command->true_case->flags |= CMD_IGNORE_RETURN;
+
+      return (execute_command (if_command->true_case));
+    }
+  else
+    {
+      QUIT;
+
+      if (if_command->false_case && (if_command->flags & CMD_IGNORE_RETURN))
+       if_command->false_case->flags |= CMD_IGNORE_RETURN;
+
+      return (execute_command (if_command->false_case));
+    }
+}
+
+#if defined (DPAREN_ARITHMETIC)
+static int
+execute_arith_command (arith_command)
+     ARITH_COM *arith_command;
+{
+  int expok, save_line_number, retval;
+  intmax_t expresult;
+  WORD_LIST *new;
+  char *exp;
+
+  expresult = 0;
+
+  save_line_number = line_number;
+  this_command_name = "((";    /* )) */
+  line_number = arith_command->line;
+  /* If we're in a function, update the line number information. */
+  if (variable_context && interactive_shell)
+    line_number -= function_line_number;
+
+  command_string_index = 0;
+  print_arith_command (arith_command->exp);
+
+  if (signal_in_progress (DEBUG_TRAP) == 0)
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  /* Run the debug trap before each arithmetic command, but do it after we
+     update the line number information and before we expand the various
+     words in the expression. */
+  retval = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    {
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+#endif
+
+  new = expand_words_no_vars (arith_command->exp);
+
+  /* If we're tracing, make a new word list with `((' at the front and `))'
+     at the back and print it. */
+  if (echo_command_at_execute)
+    xtrace_print_arith_cmd (new);
+
+  if (new)
+    {
+      exp = new->next ? string_list (new) : new->word->word;
+      expresult = evalexp (exp, &expok);
+      line_number = save_line_number;
+      if (exp != new->word->word)
+       free (exp);
+      dispose_words (new);
+    }
+  else
+    {
+      expresult = 0;
+      expok = 1;
+    }
+
+  if (expok == 0)
+    return (EXECUTION_FAILURE);
+
+  return (expresult == 0 ? EXECUTION_FAILURE : EXECUTION_SUCCESS);
+}
+#endif /* DPAREN_ARITHMETIC */
+
+#if defined (COND_COMMAND)
+
+static char * const nullstr = "";
+
+/* XXX - can COND ever be NULL when this is called? */
+static int
+execute_cond_node (cond)
+     COND_COM *cond;
+{
+  int result, invert, patmatch, rmatch, mflags, ignore;
+  char *arg1, *arg2;
+#if 0
+  char *t1, *t2;
+#endif
+
+  invert = (cond->flags & CMD_INVERT_RETURN);
+  ignore = (cond->flags & CMD_IGNORE_RETURN);
+  if (ignore)
+    {
+      if (cond->left)
+       cond->left->flags |= CMD_IGNORE_RETURN;
+      if (cond->right)
+       cond->right->flags |= CMD_IGNORE_RETURN;
+    }
+      
+  if (cond->type == COND_EXPR)
+    result = execute_cond_node (cond->left);
+  else if (cond->type == COND_OR)
+    {
+      result = execute_cond_node (cond->left);
+      if (result != EXECUTION_SUCCESS)
+       result = execute_cond_node (cond->right);
+    }
+  else if (cond->type == COND_AND)
+    {
+      result = execute_cond_node (cond->left);
+      if (result == EXECUTION_SUCCESS)
+       result = execute_cond_node (cond->right);
+    }
+  else if (cond->type == COND_UNARY)
+    {
+      if (ignore)
+       comsub_ignore_return++;
+      arg1 = cond_expand_word (cond->left->op, 0);
+      if (ignore)
+       comsub_ignore_return--;
+      if (arg1 == 0)
+       arg1 = nullstr;
+      if (echo_command_at_execute)
+       xtrace_print_cond_term (cond->type, invert, cond->op, arg1, (char *)NULL);
+      result = unary_test (cond->op->word, arg1) ? EXECUTION_SUCCESS : EXECUTION_FAILURE;
+      if (arg1 != nullstr)
+       free (arg1);
+    }
+  else if (cond->type == COND_BINARY)
+    {
+      rmatch = 0;
+      patmatch = (((cond->op->word[1] == '=') && (cond->op->word[2] == '\0') &&
+                  (cond->op->word[0] == '!' || cond->op->word[0] == '=')) ||
+                 (cond->op->word[0] == '=' && cond->op->word[1] == '\0'));
+#if defined (COND_REGEXP)
+      rmatch = (cond->op->word[0] == '=' && cond->op->word[1] == '~' &&
+               cond->op->word[2] == '\0');
+#endif
+
+      if (ignore)
+       comsub_ignore_return++;
+      arg1 = cond_expand_word (cond->left->op, 0);
+      if (ignore)
+       comsub_ignore_return--;
+      if (arg1 == 0)
+       arg1 = nullstr;
+      if (ignore)
+       comsub_ignore_return++;
+      arg2 = cond_expand_word (cond->right->op,
+                              (rmatch && shell_compatibility_level > 31) ? 2 : (patmatch ? 1 : 0));
+      if (ignore)
+       comsub_ignore_return--;
+      if (arg2 == 0)
+       arg2 = nullstr;
+
+      if (echo_command_at_execute)
+       xtrace_print_cond_term (cond->type, invert, cond->op, arg1, arg2);
+
+#if defined (COND_REGEXP)
+      if (rmatch)
+       {
+         mflags = SHMAT_PWARN;
+#if defined (ARRAY_VARS)
+         mflags |= SHMAT_SUBEXP;
+#endif
+
+#if 0
+         t1 = strescape(arg1);
+         t2 = strescape(arg2);
+         itrace("execute_cond_node: sh_regmatch on `%s' and `%s'", t1, t2);
+         free(t1);
+         free(t2);
+#endif
+
+         result = sh_regmatch (arg1, arg2, mflags);
+       }
+      else
+#endif /* COND_REGEXP */
+       {
+         int oe;
+         oe = extended_glob;
+         extended_glob = 1;
+         result = binary_test (cond->op->word, arg1, arg2, TEST_PATMATCH|TEST_ARITHEXP|TEST_LOCALE)
+                                 ? EXECUTION_SUCCESS
+                                 : EXECUTION_FAILURE;
+         extended_glob = oe;
+       }
+      if (arg1 != nullstr)
+       free (arg1);
+      if (arg2 != nullstr)
+       free (arg2);
+    }
+  else
+    {
+      command_error ("execute_cond_node", CMDERR_BADTYPE, cond->type, 0);
+      jump_to_top_level (DISCARD);
+      result = EXECUTION_FAILURE;
+    }
+
+  if (invert)
+    result = (result == EXECUTION_SUCCESS) ? EXECUTION_FAILURE : EXECUTION_SUCCESS;
+
+  return result;
+}
+
+static int
+execute_cond_command (cond_command)
+     COND_COM *cond_command;
+{
+  int retval, save_line_number;
+
+  retval = EXECUTION_SUCCESS;
+  save_line_number = line_number;
+
+  this_command_name = "[[";
+  line_number = cond_command->line;
+  /* If we're in a function, update the line number information. */
+  if (variable_context && interactive_shell)
+    line_number -= function_line_number;
+  command_string_index = 0;
+  print_cond_command (cond_command);
+
+  if (signal_in_progress (DEBUG_TRAP) == 0)
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = savestring (the_printed_command);
+    }
+
+  /* Run the debug trap before each conditional command, but do it after we
+     update the line number information. */
+  retval = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && retval != EXECUTION_SUCCESS)
+    {
+      line_number = save_line_number;
+      return (EXECUTION_SUCCESS);
+    }
+#endif
+
+#if 0
+  debug_print_cond_command (cond_command);
+#endif
+
+  last_command_exit_value = retval = execute_cond_node (cond_command);
+  line_number = save_line_number;
+  return (retval);
+}
+#endif /* COND_COMMAND */
+
+static void
+bind_lastarg (arg)
+     char *arg;
+{
+  SHELL_VAR *var;
+
+  if (arg == 0)
+    arg = "";
+  var = bind_variable ("_", arg, 0);
+  VUNSETATTR (var, att_exported);
+}
+
+/* Execute a null command.  Fork a subshell if the command uses pipes or is
+   to be run asynchronously.  This handles all the side effects that are
+   supposed to take place. */
+static int
+execute_null_command (redirects, pipe_in, pipe_out, async)
+     REDIRECT *redirects;
+     int pipe_in, pipe_out, async;
+{
+  int r;
+  int forcefork;
+  REDIRECT *rd;
+
+  for (forcefork = 0, rd = redirects; rd; rd = rd->next)
+    forcefork += rd->rflags & REDIR_VARASSIGN;
+
+  if (forcefork || pipe_in != NO_PIPE || pipe_out != NO_PIPE || async)
+    {
+      /* We have a null command, but we really want a subshell to take
+        care of it.  Just fork, do piping and redirections, and exit. */
+      if (make_child ((char *)NULL, async) == 0)
+       {
+         /* Cancel traps, in trap.c. */
+         restore_original_signals ();          /* XXX */
+
+         do_piping (pipe_in, pipe_out);
+
+#if defined (COPROCESS_SUPPORT)
+         coproc_closeall ();
+#endif
+
+         subshell_environment = 0;
+         if (async)
+           subshell_environment |= SUBSHELL_ASYNC;
+         if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+           subshell_environment |= SUBSHELL_PIPE;
+
+         if (do_redirections (redirects, RX_ACTIVE) == 0)
+           exit (EXECUTION_SUCCESS);
+         else
+           exit (EXECUTION_FAILURE);
+       }
+      else
+       {
+         close_pipes (pipe_in, pipe_out);
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+         if (pipe_out == NO_PIPE)
+           unlink_fifo_list ();
+#endif
+         return (EXECUTION_SUCCESS);
+       }
+    }
+  else
+    {
+      /* Even if there aren't any command names, pretend to do the
+        redirections that are specified.  The user expects the side
+        effects to take place.  If the redirections fail, then return
+        failure.  Otherwise, if a command substitution took place while
+        expanding the command or a redirection, return the value of that
+        substitution.  Otherwise, return EXECUTION_SUCCESS. */
+
+      r = do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE);
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+
+      if (r != 0)
+       return (EXECUTION_FAILURE);
+      else if (last_command_subst_pid != NO_PID)
+       return (last_command_exit_value);
+      else
+       return (EXECUTION_SUCCESS);
+    }
+}
+
+/* This is a hack to suppress word splitting for assignment statements
+   given as arguments to builtins with the ASSIGNMENT_BUILTIN flag set. */
+static void
+fix_assignment_words (words)
+     WORD_LIST *words;
+{
+  WORD_LIST *w, *wcmd;
+  struct builtin *b;
+  int assoc, global, array, integer;
+
+  if (words == 0)
+    return;
+
+  b = 0;
+  assoc = global = array = integer = 0;
+
+  /* Skip over assignment statements preceding a command name */
+  wcmd = words;
+  for (wcmd = words; wcmd; wcmd = wcmd->next)
+    if ((wcmd->word->flags & W_ASSIGNMENT) == 0)
+      break;
+
+  for (w = wcmd; w; w = w->next)
+    if (w->word->flags & W_ASSIGNMENT)
+      {
+       if (b == 0)
+         {
+           /* Posix (post-2008) says that `command' doesn't change whether
+              or not the builtin it shadows is a `declaration command', even
+              though it removes other special builtin properties.  In Posix
+              mode, we skip over one or more instances of `command' and
+              deal with the next word as the assignment builtin. */
+           while (posixly_correct && wcmd && wcmd->word && wcmd->word->word && STREQ (wcmd->word->word, "command"))
+             wcmd = wcmd->next;
+           b = builtin_address_internal (wcmd->word->word, 0);
+           if (b == 0 || (b->flags & ASSIGNMENT_BUILTIN) == 0)
+             return;
+           else if (b && (b->flags & ASSIGNMENT_BUILTIN))
+             wcmd->word->flags |= W_ASSNBLTIN;
+         }
+       w->word->flags |= (W_NOSPLIT|W_NOGLOB|W_TILDEEXP|W_ASSIGNARG);
+#if defined (ARRAY_VARS)
+       if (assoc)
+         w->word->flags |= W_ASSIGNASSOC;
+       if (array)
+         w->word->flags |= W_ASSIGNARRAY;
+#endif
+       if (global)
+         w->word->flags |= W_ASSNGLOBAL;
+       if (integer)
+         w->word->flags |= W_ASSIGNINT;
+      }
+#if defined (ARRAY_VARS)
+    /* Note that we saw an associative array option to a builtin that takes
+       assignment statements.  This is a bit of a kludge. */
+    else if (w->word->word[0] == '-' && (strchr (w->word->word+1, 'A') || strchr (w->word->word+1, 'a') || strchr (w->word->word+1, 'g')))
+#else
+    else if (w->word->word[0] == '-' && strchr (w->word->word+1, 'g'))
+#endif
+      {
+       if (b == 0)
+         {
+           while (posixly_correct && wcmd && wcmd->word && wcmd->word->word && STREQ (wcmd->word->word, "command"))
+             wcmd = wcmd->next;
+           b = builtin_address_internal (wcmd->word->word, 0);
+           if (b == 0 || (b->flags & ASSIGNMENT_BUILTIN) == 0)
+             return;
+           else if (b && (b->flags & ASSIGNMENT_BUILTIN))
+             wcmd->word->flags |= W_ASSNBLTIN;
+         }
+       if ((wcmd->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'A'))
+         assoc = 1;
+       else if ((wcmd->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'a'))
+         array = 1;
+       if ((wcmd->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'g'))
+         global = 1;
+       if ((wcmd->word->flags & W_ASSNBLTIN) && strchr (w->word->word+1, 'i'))
+         integer = 1;
+      }
+}
+
+/* Return 1 if the file found by searching $PATH for PATHNAME, defaulting
+   to PATHNAME, is a directory.  Used by the autocd code below. */
+static int
+is_dirname (pathname)
+     char *pathname;
+{
+  char *temp;
+  int ret;
+
+  temp = search_for_command (pathname, 0);
+  ret = (temp ? file_isdir (temp) : file_isdir (pathname));
+  free (temp);
+  return ret;
+}
+
+/* The meaty part of all the executions.  We have to start hacking the
+   real execution of commands here.  Fork a process, set things up,
+   execute the command. */
+static int
+execute_simple_command (simple_command, pipe_in, pipe_out, async, fds_to_close)
+     SIMPLE_COM *simple_command;
+     int pipe_in, pipe_out, async;
+     struct fd_bitmap *fds_to_close;
+{
+  WORD_LIST *words, *lastword;
+  char *command_line, *lastarg, *temp;
+  int first_word_quoted, result, builtin_is_special, already_forked, dofork;
+  pid_t old_last_async_pid;
+  sh_builtin_func_t *builtin;
+  SHELL_VAR *func;
+  volatile int old_builtin, old_command_builtin;
+
+  result = EXECUTION_SUCCESS;
+  special_builtin_failed = builtin_is_special = 0;
+  command_line = (char *)0;
+
+  QUIT;
+
+  /* If we're in a function, update the line number information. */
+  if (variable_context && interactive_shell && sourcelevel == 0)
+    line_number -= function_line_number;
+
+  /* Remember what this command line looks like at invocation. */
+  command_string_index = 0;
+  print_simple_command (simple_command);
+
+#if 0
+  if (signal_in_progress (DEBUG_TRAP) == 0 && (this_command_name == 0 || (STREQ (this_command_name, "trap") == 0)))
+#else
+  if (signal_in_progress (DEBUG_TRAP) == 0 && running_trap == 0)
+#endif
+    {
+      FREE (the_printed_command_except_trap);
+      the_printed_command_except_trap = the_printed_command ? savestring (the_printed_command) : (char *)0;
+    }
+
+  /* Run the debug trap before each simple command, but do it after we
+     update the line number information. */
+  result = run_debug_trap ();
+#if defined (DEBUGGER)
+  /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+     skip the command. */
+  if (debugging_mode && result != EXECUTION_SUCCESS)
+    return (EXECUTION_SUCCESS);
+#endif
+
+  first_word_quoted =
+    simple_command->words ? (simple_command->words->word->flags & W_QUOTED) : 0;
+
+  last_command_subst_pid = NO_PID;
+  old_last_async_pid = last_asynchronous_pid;
+
+  already_forked = dofork = 0;
+
+  /* If we're in a pipeline or run in the background, set DOFORK so we
+     make the child early, before word expansion.  This keeps assignment
+     statements from affecting the parent shell's environment when they
+     should not. */
+  dofork = pipe_in != NO_PIPE || pipe_out != NO_PIPE || async;
+
+  /* Something like `%2 &' should restart job 2 in the background, not cause
+     the shell to fork here. */
+  if (dofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE &&
+       simple_command->words && simple_command->words->word &&
+       simple_command->words->word->word &&
+       (simple_command->words->word->word[0] == '%'))
+    dofork = 0;
+
+  if (dofork)
+    {
+      /* Do this now, because execute_disk_command will do it anyway in the
+        vast majority of cases. */
+      maybe_make_export_env ();
+
+      /* Don't let a DEBUG trap overwrite the command string to be saved with
+        the process/job associated with this child. */
+      if (make_child (savestring (the_printed_command_except_trap), async) == 0)
+       {
+         already_forked = 1;
+         simple_command->flags |= CMD_NO_FORK;
+
+         subshell_environment = SUBSHELL_FORK;
+         if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+           subshell_environment |= SUBSHELL_PIPE;
+         if (async)
+           subshell_environment |= SUBSHELL_ASYNC;
+
+         /* We need to do this before piping to handle some really
+            pathological cases where one of the pipe file descriptors
+            is < 2. */
+         if (fds_to_close)
+           close_fd_bitmap (fds_to_close);
+
+         do_piping (pipe_in, pipe_out);
+         pipe_in = pipe_out = NO_PIPE;
+#if defined (COPROCESS_SUPPORT)
+         coproc_closeall ();
+#endif
+
+         last_asynchronous_pid = old_last_async_pid;
+
+         CHECK_SIGTERM;
+       }
+      else
+       {
+         /* Don't let simple commands that aren't the last command in a
+            pipeline change $? for the rest of the pipeline (or at all). */
+         if (pipe_out != NO_PIPE)
+           result = last_command_exit_value;
+         close_pipes (pipe_in, pipe_out);
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+         /* Close /dev/fd file descriptors in the parent after forking the
+            last child in a (possibly one-element) pipeline.  Defer this
+            until any running shell function completes. */
+         if (pipe_out == NO_PIPE && variable_context == 0)     /* XXX */
+           unlink_fifo_list ();                /* XXX */
+#endif
+         command_line = (char *)NULL;      /* don't free this. */
+         bind_lastarg ((char *)NULL);
+         return (result);
+       }
+    }
+
+  /* If we are re-running this as the result of executing the `command'
+     builtin, do not expand the command words a second time. */
+  if ((simple_command->flags & CMD_INHIBIT_EXPANSION) == 0)
+    {
+      current_fds_to_close = fds_to_close;
+      fix_assignment_words (simple_command->words);
+      /* Pass the ignore return flag down to command substitutions */
+      if (simple_command->flags & CMD_IGNORE_RETURN)   /* XXX */
+       comsub_ignore_return++;
+      words = expand_words (simple_command->words);
+      if (simple_command->flags & CMD_IGNORE_RETURN)
+       comsub_ignore_return--;
+      current_fds_to_close = (struct fd_bitmap *)NULL;
+    }
+  else
+    words = copy_word_list (simple_command->words);
+
+  /* It is possible for WORDS not to have anything left in it.
+     Perhaps all the words consisted of `$foo', and there was
+     no variable `$foo'. */
+  if (words == 0)
+    {
+      this_command_name = 0;
+      result = execute_null_command (simple_command->redirects,
+                                    pipe_in, pipe_out,
+                                    already_forked ? 0 : async);
+      if (already_forked)
+       exit (result);
+      else
+       {
+         bind_lastarg ((char *)NULL);
+         set_pipestatus_from_exit (result);
+         return (result);
+       }
+    }
+
+  lastarg = (char *)NULL;
+
+  begin_unwind_frame ("simple-command");
+
+  if (echo_command_at_execute)
+    xtrace_print_word_list (words, 1);
+
+  builtin = (sh_builtin_func_t *)NULL;
+  func = (SHELL_VAR *)NULL;
+  if ((simple_command->flags & CMD_NO_FUNCTIONS) == 0)
+    {
+      /* Posix.2 says special builtins are found before functions.  We
+        don't set builtin_is_special anywhere other than here, because
+        this path is followed only when the `command' builtin is *not*
+        being used, and we don't want to exit the shell if a special
+        builtin executed with `command builtin' fails.  `command' is not
+        a special builtin. */
+      if (posixly_correct)
+       {
+         builtin = find_special_builtin (words->word->word);
+         if (builtin)
+           builtin_is_special = 1;
+       }
+      if (builtin == 0)
+       func = find_function (words->word->word);
+    }
+
+  /* In POSIX mode, assignment errors in the temporary environment cause a
+     non-interactive shell to exit. */
+  if (posixly_correct && builtin_is_special && interactive_shell == 0 && tempenv_assign_error)
+    {
+      last_command_exit_value = EXECUTION_FAILURE;
+      jump_to_top_level (ERREXIT);
+    }
+  tempenv_assign_error = 0;    /* don't care about this any more */
+
+  add_unwind_protect (dispose_words, words);
+  QUIT;
+
+  /* Bind the last word in this command to "$_" after execution. */
+  for (lastword = words; lastword->next; lastword = lastword->next)
+    ;
+  lastarg = lastword->word->word;
+
+#if defined (JOB_CONTROL)
+  /* Is this command a job control related thing? */
+  if (words->word->word[0] == '%' && already_forked == 0)
+    {
+      this_command_name = async ? "bg" : "fg";
+      last_shell_builtin = this_shell_builtin;
+      this_shell_builtin = builtin_address (this_command_name);
+      result = (*this_shell_builtin) (words);
+      goto return_result;
+    }
+
+  /* One other possibililty.  The user may want to resume an existing job.
+     If they do, find out whether this word is a candidate for a running
+     job. */
+  if (job_control && already_forked == 0 && async == 0 &&
+       !first_word_quoted &&
+       !words->next &&
+       words->word->word[0] &&
+       !simple_command->redirects &&
+       pipe_in == NO_PIPE &&
+       pipe_out == NO_PIPE &&
+       (temp = get_string_value ("auto_resume")))
+    {
+      int job, jflags, started_status;
+
+      jflags = JM_STOPPED|JM_FIRSTMATCH;
+      if (STREQ (temp, "exact"))
+       jflags |= JM_EXACT;
+      else if (STREQ (temp, "substring"))
+       jflags |= JM_SUBSTRING;
+      else
+       jflags |= JM_PREFIX;
+      job = get_job_by_name (words->word->word, jflags);
+      if (job != NO_JOB)
+       {
+         run_unwind_frame ("simple-command");
+         this_command_name = "fg";
+         last_shell_builtin = this_shell_builtin;
+         this_shell_builtin = builtin_address ("fg");
+
+         started_status = start_job (job, 1);
+         return ((started_status < 0) ? EXECUTION_FAILURE : started_status);
+       }
+    }
+#endif /* JOB_CONTROL */
+
+run_builtin:
+  /* Remember the name of this command globally. */
+  this_command_name = words->word->word;
+
+  QUIT;
+
+  /* This command could be a shell builtin or a user-defined function.
+     We have already found special builtins by this time, so we do not
+     set builtin_is_special.  If this is a function or builtin, and we
+     have pipes, then fork a subshell in here.  Otherwise, just execute
+     the command directly. */
+  if (func == 0 && builtin == 0)
+    builtin = find_shell_builtin (this_command_name);
+
+  last_shell_builtin = this_shell_builtin;
+  this_shell_builtin = builtin;
+
+  if (builtin || func)
+    {
+      if (builtin)
+        {
+         old_builtin = executing_builtin;
+         old_command_builtin = executing_command_builtin;
+         unwind_protect_int (executing_builtin);       /* modified in execute_builtin */
+         unwind_protect_int (executing_command_builtin);       /* ditto */
+        }
+      if (already_forked)
+       {
+         /* reset_terminating_signals (); */   /* XXX */
+         /* Reset the signal handlers in the child, but don't free the
+            trap strings.  Set a flag noting that we have to free the
+            trap strings if we run trap to change a signal disposition. */
+         reset_signal_handlers ();
+         subshell_environment |= SUBSHELL_RESETTRAP;
+
+         if (async)
+           {
+             if ((simple_command->flags & CMD_STDIN_REDIR) &&
+                   pipe_in == NO_PIPE &&
+                   (stdin_redirects (simple_command->redirects) == 0))
+               async_redirect_stdin ();
+             setup_async_signals ();
+           }
+
+         subshell_level++;
+         execute_subshell_builtin_or_function
+           (words, simple_command->redirects, builtin, func,
+            pipe_in, pipe_out, async, fds_to_close,
+            simple_command->flags);
+         subshell_level--;
+       }
+      else
+       {
+         result = execute_builtin_or_function
+           (words, builtin, func, simple_command->redirects, fds_to_close,
+            simple_command->flags);
+         if (builtin)
+           {
+             if (result > EX_SHERRBASE)
+               {
+                 switch (result)
+                   {
+                   case EX_REDIRFAIL:
+                   case EX_BADASSIGN:
+                   case EX_EXPFAIL:
+                     /* These errors cause non-interactive posix mode shells to exit */
+                     if (posixly_correct && builtin_is_special && interactive_shell == 0)
+                       {
+                         last_command_exit_value = EXECUTION_FAILURE;
+                         jump_to_top_level (ERREXIT);
+                       }
+                   }
+                 result = builtin_status (result);
+                 if (builtin_is_special)
+                   special_builtin_failed = 1;
+               }
+             /* In POSIX mode, if there are assignment statements preceding
+                a special builtin, they persist after the builtin
+                completes. */
+             if (posixly_correct && builtin_is_special && temporary_env)
+               merge_temporary_env ();
+           }
+         else          /* function */
+           {
+             if (result == EX_USAGE)
+               result = EX_BADUSAGE;
+             else if (result > EX_SHERRBASE)
+               result = EXECUTION_FAILURE;
+           }
+
+         set_pipestatus_from_exit (result);
+
+         goto return_result;
+       }
+    }
+
+  if (autocd && interactive && words->word && is_dirname (words->word->word))
+    {
+      words = make_word_list (make_word ("cd"), words);
+      xtrace_print_word_list (words, 0);
+      goto run_builtin;
+    }
+
+  if (command_line == 0)
+    command_line = savestring (the_printed_command_except_trap ? the_printed_command_except_trap : "");
+
+#if defined (PROCESS_SUBSTITUTION)
+  if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0)
+    simple_command->flags &= ~CMD_NO_FORK;
+#endif
+
+  result = execute_disk_command (words, simple_command->redirects, command_line,
+                       pipe_in, pipe_out, async, fds_to_close,
+                       simple_command->flags);
+
+ return_result:
+  bind_lastarg (lastarg);
+  FREE (command_line);
+  dispose_words (words);
+  if (builtin)
+    {
+      executing_builtin = old_builtin;
+      executing_command_builtin = old_command_builtin;
+    }
+  discard_unwind_frame ("simple-command");
+  this_command_name = (char *)NULL;    /* points to freed memory now */
+  return (result);
+}
+
+/* Translate the special builtin exit statuses.  We don't really need a
+   function for this; it's a placeholder for future work. */
+static int
+builtin_status (result)
+     int result;
+{
+  int r;
+
+  switch (result)
+    {
+    case EX_USAGE:
+      r = EX_BADUSAGE;
+      break;
+    case EX_REDIRFAIL:
+    case EX_BADSYNTAX:
+    case EX_BADASSIGN:
+    case EX_EXPFAIL:
+      r = EXECUTION_FAILURE;
+      break;
+    default:
+      r = EXECUTION_SUCCESS;
+      break;
+    }
+  return (r);
+}
+
+static int
+execute_builtin (builtin, words, flags, subshell)
+     sh_builtin_func_t *builtin;
+     WORD_LIST *words;
+     int flags, subshell;
+{
+  int old_e_flag, result, eval_unwind;
+  int isbltinenv;
+  char *error_trap;
+
+  error_trap = 0;
+  old_e_flag = exit_immediately_on_error;
+  
+  /* The eval builtin calls parse_and_execute, which does not know about
+     the setting of flags, and always calls the execution functions with
+     flags that will exit the shell on an error if -e is set.  If the
+     eval builtin is being called, and we're supposed to ignore the exit
+     value of the command, we turn the -e flag off ourselves and disable
+     the ERR trap, then restore them when the command completes.  This is
+     also a problem (as below) for the command and source/. builtins. */
+  if (subshell == 0 && (flags & CMD_IGNORE_RETURN) &&
+       (builtin == eval_builtin || builtin == command_builtin || builtin == source_builtin))
+    {
+      begin_unwind_frame ("eval_builtin");
+      unwind_protect_int (exit_immediately_on_error);
+      unwind_protect_int (builtin_ignoring_errexit);
+      error_trap = TRAP_STRING (ERROR_TRAP);
+      if (error_trap)
+       {
+         error_trap = savestring (error_trap);
+         add_unwind_protect (xfree, error_trap);
+         add_unwind_protect (set_error_trap, error_trap);
+         restore_default_signal (ERROR_TRAP);
+       }
+      exit_immediately_on_error = 0;
+      builtin_ignoring_errexit = 1;
+      eval_unwind = 1;
+    }
+  else
+    eval_unwind = 0;
+
+  /* The temporary environment for a builtin is supposed to apply to
+     all commands executed by that builtin.  Currently, this is a
+     problem only with the `unset', `source' and `eval' builtins.
+     `mapfile' is a special case because it uses evalstring (same as
+     eval or source) to run its callbacks. */
+  isbltinenv = (builtin == source_builtin || builtin == eval_builtin || builtin == unset_builtin || builtin == mapfile_builtin);
+
+  if (isbltinenv)
+    {
+      if (subshell == 0)
+       begin_unwind_frame ("builtin_env");
+
+      if (temporary_env)
+       {
+         push_scope (VC_BLTNENV, temporary_env);
+         if (subshell == 0)
+           add_unwind_protect (pop_scope, (flags & CMD_COMMAND_BUILTIN) ? 0 : "1");
+          temporary_env = (HASH_TABLE *)NULL;    
+       }
+    }
+
+  /* `return' does a longjmp() back to a saved environment in execute_function.
+     If a variable assignment list preceded the command, and the shell is
+     running in POSIX mode, we need to merge that into the shell_variables
+     table, since `return' is a POSIX special builtin. */
+  if (posixly_correct && subshell == 0 && builtin == return_builtin && temporary_env)
+    {
+      begin_unwind_frame ("return_temp_env");
+      add_unwind_protect (merge_temporary_env, (char *)NULL);
+    }
+
+  executing_builtin++;
+  executing_command_builtin |= builtin == command_builtin;
+  result = ((*builtin) (words->next));
+
+  /* This shouldn't happen, but in case `return' comes back instead of
+     longjmp'ing, we need to unwind. */
+  if (posixly_correct && subshell == 0 && builtin == return_builtin && temporary_env)
+    discard_unwind_frame ("return_temp_env");
+
+  if (subshell == 0 && isbltinenv)
+    run_unwind_frame ("builtin_env");
+
+  if (eval_unwind)
+    {
+      exit_immediately_on_error = errexit_flag;
+      builtin_ignoring_errexit = 0;
+      if (error_trap)
+       {
+         set_error_trap (error_trap);
+         xfree (error_trap);
+       }
+      discard_unwind_frame ("eval_builtin");
+    }
+
+  return (result);
+}
+
+static int
+execute_function (var, words, flags, fds_to_close, async, subshell)
+     SHELL_VAR *var;
+     WORD_LIST *words;
+     int flags;
+     struct fd_bitmap *fds_to_close;
+     int async, subshell;
+{
+  int return_val, result;
+  COMMAND *tc, *fc, *save_current;
+  char *debug_trap, *error_trap, *return_trap;
+#if defined (ARRAY_VARS)
+  SHELL_VAR *funcname_v, *nfv, *bash_source_v, *bash_lineno_v;
+  ARRAY *funcname_a;
+  volatile ARRAY *bash_source_a;
+  volatile ARRAY *bash_lineno_a;
+#endif
+  FUNCTION_DEF *shell_fn;
+  char *sfile, *t;
+
+  USE_VAR(fc);
+
+  if (funcnest_max > 0 && funcnest >= funcnest_max)
+    {
+      internal_error (_("%s: maximum function nesting level exceeded (%d)"), var->name, funcnest);
+      funcnest = 0;    /* XXX - should we reset it somewhere else? */
+      jump_to_top_level (DISCARD);
+    }
+
+#if defined (ARRAY_VARS)
+  GET_ARRAY_FROM_VAR ("FUNCNAME", funcname_v, funcname_a);
+  GET_ARRAY_FROM_VAR ("BASH_SOURCE", bash_source_v, bash_source_a);
+  GET_ARRAY_FROM_VAR ("BASH_LINENO", bash_lineno_v, bash_lineno_a);
+#endif
+
+if (running_trap)
+  itrace("execute_function: running_trap = %d");
+
+  tc = (COMMAND *)copy_command (function_cell (var));
+  if (tc && (flags & CMD_IGNORE_RETURN))
+    tc->flags |= CMD_IGNORE_RETURN;
+
+  if (subshell == 0)
+    {
+      begin_unwind_frame ("function_calling");
+      push_context (var->name, subshell, temporary_env);
+      add_unwind_protect (pop_context, (char *)NULL);
+      unwind_protect_int (line_number);
+      unwind_protect_int (return_catch_flag);
+      unwind_protect_jmp_buf (return_catch);
+      add_unwind_protect (dispose_command, (char *)tc);
+      unwind_protect_pointer (this_shell_function);
+      unwind_protect_int (loop_level);
+      unwind_protect_int (funcnest);
+    }
+  else
+    push_context (var->name, subshell, temporary_env); /* don't unwind-protect for subshells */
+
+  temporary_env = (HASH_TABLE *)NULL;
+
+  this_shell_function = var;
+  make_funcname_visible (1);
+
+  debug_trap = TRAP_STRING(DEBUG_TRAP);
+  error_trap = TRAP_STRING(ERROR_TRAP);
+  return_trap = TRAP_STRING(RETURN_TRAP);
+  
+  /* The order of the unwind protects for debug_trap, error_trap and
+     return_trap is important here!  unwind-protect commands are run
+     in reverse order of registration.  If this causes problems, take
+     out the xfree unwind-protect calls and live with the small memory leak. */
+
+  /* function_trace_mode != 0 means that all functions inherit the DEBUG trap.
+     if the function has the trace attribute set, it inherits the DEBUG trap */
+  if (debug_trap && ((trace_p (var) == 0) && function_trace_mode == 0))
+    {
+      if (subshell == 0)
+       {
+         debug_trap = savestring (debug_trap);
+         add_unwind_protect (xfree, debug_trap);
+         add_unwind_protect (set_debug_trap, debug_trap);
+       }
+      restore_default_signal (DEBUG_TRAP);
+    }
+
+  /* error_trace_mode != 0 means that functions inherit the ERR trap. */
+  if (error_trap && error_trace_mode == 0)
+    {
+      if (subshell == 0)
+       {
+         error_trap = savestring (error_trap);
+         add_unwind_protect (xfree, error_trap);
+         add_unwind_protect (set_error_trap, error_trap);
+       }
+      restore_default_signal (ERROR_TRAP);
+    }
+
+  /* Shell functions inherit the RETURN trap if function tracing is on
+     globally or on individually for this function. */
+#if 0
+  if (return_trap && ((trace_p (var) == 0) && function_trace_mode == 0))
+#else
+  if (return_trap && (signal_in_progress (DEBUG_TRAP) || ((trace_p (var) == 0) && function_trace_mode == 0)))
+#endif
+    {
+      if (subshell == 0)
+       {
+         return_trap = savestring (return_trap);
+         add_unwind_protect (xfree, return_trap);
+         add_unwind_protect (set_return_trap, return_trap);
+       }
+      restore_default_signal (RETURN_TRAP);
+    }
+  
+  funcnest++;
+#if defined (ARRAY_VARS)
+  /* This is quite similar to the code in shell.c and elsewhere. */
+  shell_fn = find_function_def (this_shell_function->name);
+  sfile = shell_fn ? shell_fn->source_file : "";
+  array_push ((ARRAY *)funcname_a, this_shell_function->name);
+
+  array_push ((ARRAY *)bash_source_a, sfile);
+  t = itos (executing_line_number ());
+  array_push ((ARRAY *)bash_lineno_a, t);
+  free (t);
+#endif
+
+  /* The temporary environment for a function is supposed to apply to
+     all commands executed within the function body. */
+
+  remember_args (words->next, 1);
+
+  /* Update BASH_ARGV and BASH_ARGC */
+  if (debugging_mode)
+    push_args (words->next);
+
+  /* Number of the line on which the function body starts. */
+  line_number = function_line_number = tc->line;
+
+#if defined (JOB_CONTROL)
+  if (subshell)
+    stop_pipeline (async, (COMMAND *)NULL);
+#endif
+
+  fc = tc;
+
+  from_return_trap = 0;
+
+  return_catch_flag++;
+  return_val = setjmp_nosigs (return_catch);
+
+  if (return_val)
+    {
+      result = return_catch_value;
+      /* Run the RETURN trap in the function's context. */
+      save_current = currently_executing_command;
+      if (from_return_trap == 0)
+       run_return_trap ();
+      currently_executing_command = save_current;
+    }
+  else
+    {
+      /* Run the debug trap here so we can trap at the start of a function's
+        execution rather than the execution of the body's first command. */
+      showing_function_line = 1;
+      save_current = currently_executing_command;
+      result = run_debug_trap ();
+#if defined (DEBUGGER)
+      /* In debugging mode, if the DEBUG trap returns a non-zero status, we
+        skip the command. */
+      if (debugging_mode == 0 || result == EXECUTION_SUCCESS)
+       {
+         showing_function_line = 0;
+         currently_executing_command = save_current;
+         result = execute_command_internal (fc, 0, NO_PIPE, NO_PIPE, fds_to_close);
+
+         /* Run the RETURN trap in the function's context */
+         save_current = currently_executing_command;
+         run_return_trap ();
+         currently_executing_command = save_current;
+       }
+#else
+      result = execute_command_internal (fc, 0, NO_PIPE, NO_PIPE, fds_to_close);
+
+      save_current = currently_executing_command;
+      run_return_trap ();
+      currently_executing_command = save_current;
+#endif
+      showing_function_line = 0;
+    }
+
+  /* Restore BASH_ARGC and BASH_ARGV */
+  if (debugging_mode)
+    pop_args ();
+
+  if (subshell == 0)
+    run_unwind_frame ("function_calling");
+
+#if defined (ARRAY_VARS)
+  /* These two variables cannot be unset, and cannot be affected by the
+     function. */
+  array_pop ((ARRAY *)bash_source_a);
+  array_pop ((ARRAY *)bash_lineno_a);
+
+  /* FUNCNAME can be unset, and so can potentially be changed by the
+     function. */
+  GET_ARRAY_FROM_VAR ("FUNCNAME", nfv, funcname_a);
+  if (nfv == funcname_v)
+    array_pop (funcname_a);
+#endif
+  
+  if (variable_context == 0 || this_shell_function == 0)
+    {
+      make_funcname_visible (0);
+#if defined (PROCESS_SUBSTITUTION)
+      unlink_fifo_list ();
+#endif
+    }
+  
+  return (result);
+}
+
+/* A convenience routine for use by other parts of the shell to execute
+   a particular shell function. */
+int
+execute_shell_function (var, words)
+     SHELL_VAR *var;
+     WORD_LIST *words;
+{
+  int ret;
+  struct fd_bitmap *bitmap;
+
+  bitmap = new_fd_bitmap (FD_BITMAP_DEFAULT_SIZE);
+  begin_unwind_frame ("execute-shell-function");
+  add_unwind_protect (dispose_fd_bitmap, (char *)bitmap);
+      
+  ret = execute_function (var, words, 0, bitmap, 0, 0);
+
+  dispose_fd_bitmap (bitmap);
+  discard_unwind_frame ("execute-shell-function");
+
+  return ret;
+}
+
+/* Execute a shell builtin or function in a subshell environment.  This
+   routine does not return; it only calls exit().  If BUILTIN is non-null,
+   it points to a function to call to execute a shell builtin; otherwise
+   VAR points at the body of a function to execute.  WORDS is the arguments
+   to the command, REDIRECTS specifies redirections to perform before the
+   command is executed. */
+static void
+execute_subshell_builtin_or_function (words, redirects, builtin, var,
+                                     pipe_in, pipe_out, async, fds_to_close,
+                                     flags)
+     WORD_LIST *words;
+     REDIRECT *redirects;
+     sh_builtin_func_t *builtin;
+     SHELL_VAR *var;
+     int pipe_in, pipe_out, async;
+     struct fd_bitmap *fds_to_close;
+     int flags;
+{
+  int result, r, funcvalue;
+#if defined (JOB_CONTROL)
+  int jobs_hack;
+
+  jobs_hack = (builtin == jobs_builtin) &&
+               ((subshell_environment & SUBSHELL_ASYNC) == 0 || pipe_out != NO_PIPE);
+#endif
+
+  /* A subshell is neither a login shell nor interactive. */
+  login_shell = interactive = 0;
+
+  if (async)
+    subshell_environment |= SUBSHELL_ASYNC;
+  if (pipe_in != NO_PIPE || pipe_out != NO_PIPE)
+    subshell_environment |= SUBSHELL_PIPE;
+
+  maybe_make_export_env ();    /* XXX - is this needed? */
+
+#if defined (JOB_CONTROL)
+  /* Eradicate all traces of job control after we fork the subshell, so
+     all jobs begun by this subshell are in the same process group as
+     the shell itself. */
+
+  /* Allow the output of `jobs' to be piped. */
+  if (jobs_hack)
+    kill_current_pipeline ();
+  else
+    without_job_control ();
+
+  set_sigchld_handler ();
+#endif /* JOB_CONTROL */
+
+  set_sigint_handler ();
+
+  if (fds_to_close)
+    close_fd_bitmap (fds_to_close);
+
+  do_piping (pipe_in, pipe_out);
+
+  if (do_redirections (redirects, RX_ACTIVE) != 0)
+    exit (EXECUTION_FAILURE);
+
+  if (builtin)
+    {
+      /* Give builtins a place to jump back to on failure,
+        so we don't go back up to main(). */
+      result = setjmp_nosigs (top_level);
+
+      /* Give the return builtin a place to jump to when executed in a subshell
+         or pipeline */
+      funcvalue = 0;
+      if (return_catch_flag && builtin == return_builtin)
+        funcvalue = setjmp_nosigs (return_catch);
+
+      if (result == EXITPROG)
+       exit (last_command_exit_value);
+      else if (result)
+       exit (EXECUTION_FAILURE);
+      else if (funcvalue)
+       exit (return_catch_value);
+      else
+       {
+         r = execute_builtin (builtin, words, flags, 1);
+         fflush (stdout);
+         if (r == EX_USAGE)
+           r = EX_BADUSAGE;
+         exit (r);
+       }
+    }
+  else
+    {
+      r = execute_function (var, words, flags, fds_to_close, async, 1);
+      fflush (stdout);
+      exit (r);
+    }
+}
+
+/* Execute a builtin or function in the current shell context.  If BUILTIN
+   is non-null, it is the builtin command to execute, otherwise VAR points
+   to the body of a function.  WORDS are the command's arguments, REDIRECTS
+   are the redirections to perform.  FDS_TO_CLOSE is the usual bitmap of
+   file descriptors to close.
+
+   If BUILTIN is exec_builtin, the redirections specified in REDIRECTS are
+   not undone before this function returns. */
+static int
+execute_builtin_or_function (words, builtin, var, redirects,
+                            fds_to_close, flags)
+     WORD_LIST *words;
+     sh_builtin_func_t *builtin;
+     SHELL_VAR *var;
+     REDIRECT *redirects;
+     struct fd_bitmap *fds_to_close;
+     int flags;
+{
+  int result;
+  REDIRECT *saved_undo_list;
+#if defined (PROCESS_SUBSTITUTION)
+  int ofifo, nfifo, osize;
+  char *ofifo_list;
+#endif
+
+
+#if defined (PROCESS_SUBSTITUTION)  
+  ofifo = num_fifos ();
+  ofifo_list = copy_fifo_list (&osize);
+#endif
+
+  if (do_redirections (redirects, RX_ACTIVE|RX_UNDOABLE) != 0)
+    {
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+      dispose_exec_redirects ();
+#if defined (PROCESS_SUBSTITUTION)
+      free (ofifo_list);
+#endif
+      return (EX_REDIRFAIL);   /* was EXECUTION_FAILURE */
+    }
+
+  saved_undo_list = redirection_undo_list;
+
+  /* Calling the "exec" builtin changes redirections forever. */
+  if (builtin == exec_builtin)
+    {
+      dispose_redirects (saved_undo_list);
+      saved_undo_list = exec_redirection_undo_list;
+      exec_redirection_undo_list = (REDIRECT *)NULL;
+    }
+  else
+    dispose_exec_redirects ();
+
+  if (saved_undo_list)
+    {
+      begin_unwind_frame ("saved redirects");
+      add_unwind_protect (cleanup_redirects, (char *)saved_undo_list);
+    }
+
+  redirection_undo_list = (REDIRECT *)NULL;
+
+  if (builtin)
+    result = execute_builtin (builtin, words, flags, 0);
+  else
+    result = execute_function (var, words, flags, fds_to_close, 0, 0);
+
+  /* We do this before undoing the effects of any redirections. */
+  fflush (stdout);
+  fpurge (stdout);
+  if (ferror (stdout))
+    clearerr (stdout);  
+
+  /* If we are executing the `command' builtin, but this_shell_builtin is
+     set to `exec_builtin', we know that we have something like
+     `command exec [redirection]', since otherwise `exec' would have
+     overwritten the shell and we wouldn't get here.  In this case, we
+     want to behave as if the `command' builtin had not been specified
+     and preserve the redirections. */
+  if (builtin == command_builtin && this_shell_builtin == exec_builtin)
+    {
+      int discard;
+
+      discard = 0;
+      if (saved_undo_list)
+       {
+         dispose_redirects (saved_undo_list);
+         discard = 1;
+       }
+      redirection_undo_list = exec_redirection_undo_list;
+      saved_undo_list = exec_redirection_undo_list = (REDIRECT *)NULL;      
+      if (discard)
+       discard_unwind_frame ("saved redirects");
+    }
+
+  if (saved_undo_list)
+    {
+      redirection_undo_list = saved_undo_list;
+      discard_unwind_frame ("saved redirects");
+    }
+
+  if (redirection_undo_list)
+    {
+      cleanup_redirects (redirection_undo_list);
+      redirection_undo_list = (REDIRECT *)NULL;
+    }
+
+#if defined (PROCESS_SUBSTITUTION)
+  /* Close any FIFOs created by this builtin or function. */
+  nfifo = num_fifos ();
+  if (nfifo > ofifo)
+    close_new_fifos (ofifo_list, osize);
+  free (ofifo_list);
+#endif
+
+  return (result);
+}
+
+void
+setup_async_signals ()
+{
+#if defined (__BEOS__)
+  set_signal_handler (SIGHUP, SIG_IGN);        /* they want csh-like behavior */
+#endif
+
+#if defined (JOB_CONTROL)
+  if (job_control == 0)
+#endif
+    {
+      /* Make sure we get the original signal dispositions now so we don't
+        confuse the trap builtin later if the subshell tries to use it to
+        reset SIGINT/SIGQUIT.  Don't call set_signal_ignored; that sets
+        the value of original_signals to SIG_IGN. Posix interpretation 751. */
+      get_original_signal (SIGINT);
+      set_signal_handler (SIGINT, SIG_IGN);
+
+      get_original_signal (SIGQUIT);
+      set_signal_handler (SIGQUIT, SIG_IGN);
+    }
+}
+
+/* Execute a simple command that is hopefully defined in a disk file
+   somewhere.
+
+   1) fork ()
+   2) connect pipes
+   3) look up the command
+   4) do redirections
+   5) execve ()
+   6) If the execve failed, see if the file has executable mode set.
+   If so, and it isn't a directory, then execute its contents as
+   a shell script.
+
+   Note that the filename hashing stuff has to take place up here,
+   in the parent.  This is probably why the Bourne style shells
+   don't handle it, since that would require them to go through
+   this gnarly hair, for no good reason.
+
+   NOTE: callers expect this to fork or exit(). */
+
+/* Name of a shell function to call when a command name is not found. */
+#ifndef NOTFOUND_HOOK
+#  define NOTFOUND_HOOK "command_not_found_handle"
+#endif
+
+static int
+execute_disk_command (words, redirects, command_line, pipe_in, pipe_out,
+                     async, fds_to_close, cmdflags)
+     WORD_LIST *words;
+     REDIRECT *redirects;
+     char *command_line;
+     int pipe_in, pipe_out, async;
+     struct fd_bitmap *fds_to_close;
+     int cmdflags;
+{
+  char *pathname, *command, **args;
+  int nofork, result;
+  pid_t pid;
+  SHELL_VAR *hookf;
+  WORD_LIST *wl;
+
+  nofork = (cmdflags & CMD_NO_FORK);  /* Don't fork, just exec, if no pipes */
+  pathname = words->word->word;
+
+  result = EXECUTION_SUCCESS;
+#if defined (RESTRICTED_SHELL)
+  command = (char *)NULL;
+  if (restricted && mbschr (pathname, '/'))
+    {
+      internal_error (_("%s: restricted: cannot specify `/' in command names"),
+                   pathname);
+      result = last_command_exit_value = EXECUTION_FAILURE;
+
+      /* If we're not going to fork below, we must already be in a child
+         process or a context in which it's safe to call exit(2).  */
+      if (nofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE)
+       exit (last_command_exit_value);
+      else
+       goto parent_return;
+    }
+#endif /* RESTRICTED_SHELL */
+
+  command = search_for_command (pathname, 1);
+
+  if (command)
+    {
+      maybe_make_export_env ();
+      put_command_name_into_env (command);
+    }
+
+  /* We have to make the child before we check for the non-existence
+     of COMMAND, since we want the error messages to be redirected. */
+  /* If we can get away without forking and there are no pipes to deal with,
+     don't bother to fork, just directly exec the command. */
+  if (nofork && pipe_in == NO_PIPE && pipe_out == NO_PIPE)
+    pid = 0;
+  else
+    pid = make_child (savestring (command_line), async);
+
+  if (pid == 0)
+    {
+      int old_interactive;
+
+      reset_terminating_signals ();    /* XXX */
+      /* Cancel traps, in trap.c. */
+      restore_original_signals ();
+
+      CHECK_SIGTERM;
+
+      /* restore_original_signals may have undone the work done
+        by make_child to ensure that SIGINT and SIGQUIT are ignored
+        in asynchronous children. */
+      if (async)
+       {
+         if ((cmdflags & CMD_STDIN_REDIR) &&
+               pipe_in == NO_PIPE &&
+               (stdin_redirects (redirects) == 0))
+           async_redirect_stdin ();
+         setup_async_signals ();
+       }
+
+      /* This functionality is now provided by close-on-exec of the
+        file descriptors manipulated by redirection and piping.
+        Some file descriptors still need to be closed in all children
+        because of the way bash does pipes; fds_to_close is a
+        bitmap of all such file descriptors. */
+      if (fds_to_close)
+       close_fd_bitmap (fds_to_close);
+
+      do_piping (pipe_in, pipe_out);
+
+      old_interactive = interactive;
+      if (async)
+       interactive = 0;
+
+      subshell_environment = SUBSHELL_FORK;
+
+      if (redirects && (do_redirections (redirects, RX_ACTIVE) != 0))
+       {
+#if defined (PROCESS_SUBSTITUTION)
+         /* Try to remove named pipes that may have been created as the
+            result of redirections. */
+         unlink_fifo_list ();
+#endif /* PROCESS_SUBSTITUTION */
+         exit (EXECUTION_FAILURE);
+       }
+
+      if (async)
+       interactive = old_interactive;
+
+      if (command == 0)
+       {
+         hookf = find_function (NOTFOUND_HOOK);
+         if (hookf == 0)
+           {
+             /* Make sure filenames are displayed using printable characters */
+             if (ansic_shouldquote (pathname))
+               pathname = ansic_quote (pathname, 0, NULL);
+             internal_error (_("%s: command not found"), pathname);
+             exit (EX_NOTFOUND);       /* Posix.2 says the exit status is 127 */
+           }
+
+#if defined (JOB_CONTROL)
+         /* May need to reinitialize more of the job control state here. */
+         kill_current_pipeline ();
+#endif
+
+         wl = make_word_list (make_word (NOTFOUND_HOOK), words);
+         exit (execute_shell_function (hookf, wl));
+       }
+
+      CHECK_SIGTERM;
+
+      /* Execve expects the command name to be in args[0].  So we
+        leave it there, in the same format that the user used to
+        type it in. */
+      args = strvec_from_word_list (words, 0, 0, (int *)NULL);
+      exit (shell_execve (command, args, export_env));
+    }
+  else
+    {
+parent_return:
+      QUIT;
+
+      /* Make sure that the pipes are closed in the parent. */
+      close_pipes (pipe_in, pipe_out);
+#if defined (PROCESS_SUBSTITUTION) && defined (HAVE_DEV_FD)
+      if (variable_context == 0)
+        unlink_fifo_list ();
+#endif
+      FREE (command);
+      return (result);
+    }
+}
+
+/* CPP defines to decide whether a particular index into the #! line
+   corresponds to a valid interpreter name or argument character, or
+   whitespace.  The MSDOS define is to allow \r to be treated the same
+   as \n. */
+
+#if !defined (MSDOS)
+#  define STRINGCHAR(ind) \
+    (ind < sample_len && !whitespace (sample[ind]) && sample[ind] != '\n')
+#  define WHITECHAR(ind) \
+    (ind < sample_len && whitespace (sample[ind]))
+#else  /* MSDOS */
+#  define STRINGCHAR(ind) \
+    (ind < sample_len && !whitespace (sample[ind]) && sample[ind] != '\n' && sample[ind] != '\r')
+#  define WHITECHAR(ind) \
+    (ind < sample_len && whitespace (sample[ind]))
+#endif /* MSDOS */
+
+static char *
+getinterp (sample, sample_len, endp)
+     char *sample;
+     int sample_len, *endp;
+{
+  register int i;
+  char *execname;
+  int start;
+
+  /* Find the name of the interpreter to exec. */
+  for (i = 2; i < sample_len && whitespace (sample[i]); i++)
+    ;
+
+  for (start = i; STRINGCHAR(i); i++)
+    ;
+
+  execname = substring (sample, start, i);
+
+  if (endp)
+    *endp = i;
+  return execname;
+}
+
+#if !defined (HAVE_HASH_BANG_EXEC)
+/* If the operating system on which we're running does not handle
+   the #! executable format, then help out.  SAMPLE is the text read
+   from the file, SAMPLE_LEN characters.  COMMAND is the name of
+   the script; it and ARGS, the arguments given by the user, will
+   become arguments to the specified interpreter.  ENV is the environment
+   to pass to the interpreter.
+
+   The word immediately following the #! is the interpreter to execute.
+   A single argument to the interpreter is allowed. */
+
+static int
+execute_shell_script (sample, sample_len, command, args, env)
+     char *sample;
+     int sample_len;
+     char *command;
+     char **args, **env;
+{
+  char *execname, *firstarg;
+  int i, start, size_increment, larry;
+
+  /* Find the name of the interpreter to exec. */
+  execname = getinterp (sample, sample_len, &i);
+  size_increment = 1;
+
+  /* Now the argument, if any. */
+  for (firstarg = (char *)NULL, start = i; WHITECHAR(i); i++)
+    ;
+
+  /* If there is more text on the line, then it is an argument for the
+     interpreter. */
+
+  if (STRINGCHAR(i))  
+    {
+      for (start = i; STRINGCHAR(i); i++)
+       ;
+      firstarg = substring ((char *)sample, start, i);
+      size_increment = 2;
+    }
+
+  larry = strvec_len (args) + size_increment;
+  args = strvec_resize (args, larry + 1);
+
+  for (i = larry - 1; i; i--)
+    args[i] = args[i - size_increment];
+
+  args[0] = execname;
+  if (firstarg)
+    {
+      args[1] = firstarg;
+      args[2] = command;
+    }
+  else
+    args[1] = command;
+
+  args[larry] = (char *)NULL;
+
+  return (shell_execve (execname, args, env));
+}
+#undef STRINGCHAR
+#undef WHITECHAR
+
+#endif /* !HAVE_HASH_BANG_EXEC */
+
+static void
+initialize_subshell ()
+{
+#if defined (ALIAS)
+  /* Forget about any aliases that we knew of.  We are in a subshell. */
+  delete_all_aliases ();
+#endif /* ALIAS */
+
+#if defined (HISTORY)
+  /* Forget about the history lines we have read.  This is a non-interactive
+     subshell. */
+  history_lines_this_session = 0;
+#endif
+
+#if defined (JOB_CONTROL)
+  /* Forget about the way job control was working. We are in a subshell. */
+  without_job_control ();
+  set_sigchld_handler ();
+  init_job_stats ();
+#endif /* JOB_CONTROL */
+
+  /* Reset the values of the shell flags and options. */
+  reset_shell_flags ();
+  reset_shell_options ();
+  reset_shopt_options ();
+
+  /* Zero out builtin_env, since this could be a shell script run from a
+     sourced file with a temporary environment supplied to the `source/.'
+     builtin.  Such variables are not supposed to be exported (empirical
+     testing with sh and ksh).  Just throw it away; don't worry about a
+     memory leak. */
+  if (vc_isbltnenv (shell_variables))
+    shell_variables = shell_variables->down;
+
+  clear_unwind_protect_list (0);
+  /* XXX -- are there other things we should be resetting here? */
+  parse_and_execute_level = 0;         /* nothing left to restore it */
+
+  /* We're no longer inside a shell function. */
+  variable_context = return_catch_flag = funcnest = 0;
+
+  executing_list = 0;          /* XXX */
+
+  /* If we're not interactive, close the file descriptor from which we're
+     reading the current shell script. */
+  if (interactive_shell == 0)
+    unset_bash_input (0);
+}
+
+#if defined (HAVE_SETOSTYPE) && defined (_POSIX_SOURCE)
+#  define SETOSTYPE(x) __setostype(x)
+#else
+#  define SETOSTYPE(x)
+#endif
+
+#define READ_SAMPLE_BUF(file, buf, len) \
+  do \
+    { \
+      fd = open(file, O_RDONLY); \
+      if (fd >= 0) \
+       { \
+         len = read (fd, buf, 80); \
+         close (fd); \
+       } \
+      else \
+       len = -1; \
+    } \
+  while (0)
+      
+/* Call execve (), handling interpreting shell scripts, and handling
+   exec failures. */
+int
+shell_execve (command, args, env)
+     char *command;
+     char **args, **env;
+{
+  int larray, i, fd;
+  char sample[80];
+  int sample_len;
+
+  SETOSTYPE (0);               /* Some systems use for USG/POSIX semantics */
+  execve (command, args, env);
+  i = errno;                   /* error from execve() */
+  CHECK_TERMSIG;
+  SETOSTYPE (1);
+
+  /* If we get to this point, then start checking out the file.
+     Maybe it is something we can hack ourselves. */
+  if (i != ENOEXEC)
+    {
+      if (file_isdir (command))
+#if defined (EISDIR)
+       internal_error (_("%s: %s"), command, strerror (EISDIR));
+#else
+       internal_error (_("%s: is a directory"), command);
+#endif
+      else if (executable_file (command) == 0)
+       {
+         errno = i;
+         file_error (command);
+       }
+      /* errors not involving the path argument to execve. */
+      else if (i == E2BIG || i == ENOMEM)
+       {
+         errno = i;
+         file_error (command);
+       }
+      else
+       {
+         /* The file has the execute bits set, but the kernel refuses to
+            run it for some reason.  See why. */
+#if defined (HAVE_HASH_BANG_EXEC)
+         READ_SAMPLE_BUF (command, sample, sample_len);
+         sample[sample_len - 1] = '\0';
+         if (sample_len > 2 && sample[0] == '#' && sample[1] == '!')
+           {
+             char *interp;
+             int ilen;
+
+             interp = getinterp (sample, sample_len, (int *)NULL);
+             ilen = strlen (interp);
+             errno = i;
+             if (interp[ilen - 1] == '\r')
+               {
+                 interp = xrealloc (interp, ilen + 2);
+                 interp[ilen - 1] = '^';
+                 interp[ilen] = 'M';
+                 interp[ilen + 1] = '\0';
+               }
+             sys_error (_("%s: %s: bad interpreter"), command, interp ? interp : "");
+             FREE (interp);
+             return (EX_NOEXEC);
+           }
+#endif
+         errno = i;
+         file_error (command);
+       }
+      return ((i == ENOENT) ? EX_NOTFOUND : EX_NOEXEC);        /* XXX Posix.2 says that exit status is 126 */
+    }
+
+  /* This file is executable.
+     If it begins with #!, then help out people with losing operating
+     systems.  Otherwise, check to see if it is a binary file by seeing
+     if the contents of the first line (or up to 80 characters) are in the
+     ASCII set.  If it's a text file, execute the contents as shell commands,
+     otherwise return 126 (EX_BINARY_FILE). */
+  READ_SAMPLE_BUF (command, sample, sample_len);
+
+  if (sample_len == 0)
+    return (EXECUTION_SUCCESS);
+
+  /* Is this supposed to be an executable script?
+     If so, the format of the line is "#! interpreter [argument]".
+     A single argument is allowed.  The BSD kernel restricts
+     the length of the entire line to 32 characters (32 bytes
+     being the size of the BSD exec header), but we allow 80
+     characters. */
+  if (sample_len > 0)
+    {
+#if !defined (HAVE_HASH_BANG_EXEC)
+      if (sample_len > 2 && sample[0] == '#' && sample[1] == '!')
+       return (execute_shell_script (sample, sample_len, command, args, env));
+      else
+#endif
+      if (check_binary_file (sample, sample_len))
+       {
+         internal_error (_("%s: cannot execute binary file: %s"), command, strerror (i));
+         return (EX_BINARY_FILE);
+       }
+    }
+
+  /* We have committed to attempting to execute the contents of this file
+     as shell commands. */
+
+  initialize_subshell ();
+
+  set_sigint_handler ();
+
+  /* Insert the name of this shell into the argument list. */
+  larray = strvec_len (args) + 1;
+  args = strvec_resize (args, larray + 1);
+
+  for (i = larray - 1; i; i--)
+    args[i] = args[i - 1];
+
+  args[0] = shell_name;
+  args[1] = command;
+  args[larray] = (char *)NULL;
+
+  if (args[0][0] == '-')
+    args[0]++;
+
+#if defined (RESTRICTED_SHELL)
+  if (restricted)
+    change_flag ('r', FLAG_OFF);
+#endif
+
+  if (subshell_argv)
+    {
+      /* Can't free subshell_argv[0]; that is shell_name. */
+      for (i = 1; i < subshell_argc; i++)
+       free (subshell_argv[i]);
+      free (subshell_argv);
+    }
+
+  dispose_command (currently_executing_command);       /* XXX */
+  currently_executing_command = (COMMAND *)NULL;
+
+  subshell_argc = larray;
+  subshell_argv = args;
+  subshell_envp = env;
+
+  unbind_args ();      /* remove the positional parameters */
+
+  longjmp (subshell_top_level, 1);
+  /*NOTREACHED*/
+}
+
+static int
+execute_intern_function (name, funcdef)
+     WORD_DESC *name;
+     FUNCTION_DEF *funcdef;
+{
+  SHELL_VAR *var;
+
+  if (check_identifier (name, posixly_correct) == 0)
+    {
+      if (posixly_correct && interactive_shell == 0)
+       {
+         last_command_exit_value = EX_BADUSAGE;
+         jump_to_top_level (ERREXIT);
+       }
+      return (EXECUTION_FAILURE);
+    }
+
+  /* Posix interpretation 383 */
+  if (posixly_correct && find_special_builtin (name->word))
+    {
+      internal_error (_("`%s': is a special builtin"), name->word);
+      last_command_exit_value = EX_BADUSAGE;
+      jump_to_top_level (ERREXIT);
+    }
+
+  var = find_function (name->word);
+  if (var && (readonly_p (var) || noassign_p (var)))
+    {
+      if (readonly_p (var))
+       internal_error (_("%s: readonly function"), var->name);
+      return (EXECUTION_FAILURE);
+    }
+
+#if defined (DEBUGGER)
+  bind_function_def (name->word, funcdef);
+#endif
+
+  bind_function (name->word, funcdef->command);
+  return (EXECUTION_SUCCESS);
+}
+
+#if defined (INCLUDE_UNUSED)
+#if defined (PROCESS_SUBSTITUTION)
+void
+close_all_files ()
+{
+  register int i, fd_table_size;
+
+  fd_table_size = getdtablesize ();
+  if (fd_table_size > 256)     /* clamp to a reasonable value */
+    fd_table_size = 256;
+
+  for (i = 3; i < fd_table_size; i++)
+    close (i);
+}
+#endif /* PROCESS_SUBSTITUTION */
+#endif
+
+static void
+close_pipes (in, out)
+     int in, out;
+{
+  if (in >= 0)
+    close (in);
+  if (out >= 0)
+    close (out);
+}
+
+static void
+dup_error (oldd, newd)
+     int oldd, newd;
+{
+  sys_error (_("cannot duplicate fd %d to fd %d"), oldd, newd);
+}
+
+/* Redirect input and output to be from and to the specified pipes.
+   NO_PIPE and REDIRECT_BOTH are handled correctly. */
+static void
+do_piping (pipe_in, pipe_out)
+     int pipe_in, pipe_out;
+{
+  if (pipe_in != NO_PIPE)
+    {
+      if (dup2 (pipe_in, 0) < 0)
+       dup_error (pipe_in, 0);
+      if (pipe_in > 0)
+       close (pipe_in);
+#ifdef __CYGWIN__
+      /* Let stdio know the fd may have changed from text to binary mode. */
+      freopen (NULL, "r", stdin);
+#endif /* __CYGWIN__ */
+    }
+  if (pipe_out != NO_PIPE)
+    {
+      if (pipe_out != REDIRECT_BOTH)
+       {
+         if (dup2 (pipe_out, 1) < 0)
+           dup_error (pipe_out, 1);
+         if (pipe_out == 0 || pipe_out > 1)
+           close (pipe_out);
+       }
+      else
+       {
+         if (dup2 (1, 2) < 0)
+           dup_error (1, 2);
+       }
+#ifdef __CYGWIN__
+      /* Let stdio know the fd may have changed from text to binary mode, and
+        make sure to preserve stdout line buffering. */
+      freopen (NULL, "w", stdout);
+      sh_setlinebuf (stdout);
+#endif /* __CYGWIN__ */
+    }
+}
diff --git a/lib/readline/doc/Makefile.old b/lib/readline/doc/Makefile.old
new file mode 100644 (file)
index 0000000..58d4dd7
--- /dev/null
@@ -0,0 +1,76 @@
+# This makefile for Readline library documentation is in -*- text -*- mode.
+# Emacs likes it that way.
+RM = rm -f
+
+MAKEINFO    = makeinfo
+TEXI2DVI    = texi2dvi
+TEXI2HTML   = texi2html
+QUIETPS     = #set this to -q to shut up dvips
+DVIPS       = dvips -D 300 $(QUIETPS) -o $@     # tricky
+
+INSTALL_DATA = cp
+infodir = /usr/local/info
+
+RLSRC = rlman.texinfo rluser.texinfo rltech.texinfo
+HISTSRC = hist.texinfo hsuser.texinfo hstech.texinfo
+
+DVIOBJ = readline.dvi history.dvi
+INFOOBJ = readline.info history.info
+PSOBJ = readline.ps history.ps
+HTMLOBJ = readline.html history.html
+
+all: info dvi html ps
+nodvi: info html
+
+readline.dvi: $(RLSRC)
+       $(TEXI2DVI) rlman.texinfo
+       mv rlman.dvi readline.dvi
+
+readline.info: $(RLSRC)
+       $(MAKEINFO) --no-split -o $@ rlman.texinfo
+
+history.dvi: ${HISTSRC}
+       $(TEXI2DVI) hist.texinfo
+       mv hist.dvi history.dvi
+
+history.info: ${HISTSRC}
+       $(MAKEINFO) --no-split -o $@ hist.texinfo
+
+readline.ps:   readline.dvi
+       $(RM) $@
+       $(DVIPS) readline.dvi
+
+history.ps:    history.dvi
+       $(RM) $@
+       $(DVIPS) history.dvi
+
+readline.html: ${RLSRC}
+       $(TEXI2HTML) rlman.texinfo
+       sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman.html > readline.html
+       sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman_toc.html > readline_toc.html
+       $(RM) rlman.html rlman_toc.html
+
+history.html:  ${HISTSRC}
+       $(TEXI2HTML) hist.texinfo
+       sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist.html > history.html
+       sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist_toc.html > history_toc.html
+       $(RM) hist.html hist_toc.html
+
+info:  $(INFOOBJ)
+dvi:   $(DVIOBJ)
+ps:    $(PSOBJ)
+html:  $(HTMLOBJ)
+
+clean:
+       $(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \
+             *.fns *.kys *.tps *.vrs *.o core
+
+distclean: clean
+mostlyclean: clean
+
+maintainer-clean: clean
+       $(RM) *.dvi *.info *.info-* *.ps *.html
+
+install:       info
+       ${INSTALL_DATA} readline.info $(infodir)/readline.info
+       ${INSTALL_DATA} history.info $(infodir)/history.info
index a7e451c17c36b26eeae51b01bfc5d9ba8464da7b..0f00e57c564e6b98b58f920cde02333a25157d8c 100644 (file)
@@ -1,16 +1,25 @@
 /* Standard include files. stdio.h is required. */
 #include <stdlib.h>
 #include <unistd.h>
+#include <string.h>
 
 /* Used for select(2) */
 #include <sys/types.h>
 #include <sys/select.h>
 
+#include <errno.h>
 #include <stdio.h>
 
 /* Standard readline include files. */
-#include <readline/readline.h>
-#include <readline/history.h>
+#if defined (READLINE_LIBRARY)
+#  include "readline.h"
+#  include "history.h"
+#else
+#  include <readline/readline.h>
+#  include <readline/history.h>
+#endif
+
+extern int errno;
 
 static void cb_linehandler (char *);
 
@@ -65,7 +74,7 @@ main (int c, char **v)
       FD_SET (fileno (rl_instream), &fds);    
 
       r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
-      if (r < 0)
+      if (r < 0 && errno != EINTR)
        {
          perror ("rltest: select");
          rl_callback_handler_remove ();
index 03eefa6eb218de89a9fd5062ab41bc45543fcc42..eb4eae357b2b28106967520e1b1482bff90b84bd 100644 (file)
@@ -964,7 +964,7 @@ _rl_dispatch_subseq (key, map, got_subseq)
 #if defined (VI_MODE)
   if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap &&
       key != ANYOTHERKEY &&
-      rl_key_sequence_length == 1 &&   /* XXX */
+      _rl_dispatching_keymap == vi_movement_keymap &&
       _rl_vi_textmod_command (key))
     _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign);
 #endif
index 14a370d20e22dd91e09969c1507ff480d501bf4e..b486e7ba55c4c1dcd6d2953746b8f714db70aeac 100644 (file)
@@ -410,6 +410,7 @@ extern void _rl_vi_initialize_line PARAMS((void));
 extern void _rl_vi_reset_last PARAMS((void));
 extern void _rl_vi_set_last PARAMS((int, int, int));
 extern int _rl_vi_textmod_command PARAMS((int));
+extern int _rl_vi_motion_command PARAMS((int));
 extern void _rl_vi_done_inserting PARAMS((void));
 extern int _rl_vi_domove_callback PARAMS((_rl_vimotion_cxt *));
 
index 0864192e3f4d5322d67c5fffee820a2012208658..a1c409aae7b52372568c504934aba73bee6797a0 100644 (file)
@@ -192,6 +192,13 @@ _rl_vi_textmod_command (c)
   return (member (c, vi_textmod));
 }
 
+int
+_rl_vi_motion_command (c)
+     int c;
+{
+  return (member (c, vi_motion));
+}
+
 static void
 _rl_vi_replace_insert (count)
      int count;
diff --git a/parse.y b/parse.y
index 82595de9ae4713c0becc7e5de9bd1f55d674be99..83d5b9f20470343304aefeb647be32ad292993af 100644 (file)
--- a/parse.y
+++ b/parse.y
@@ -3398,7 +3398,7 @@ parse_matched_pair (qc, open, close, lenp, flags)
          within a double-quoted ${...} construct "an even number of
          unescaped double-quotes or single-quotes, if any, shall occur." */
       /* This was changed in Austin Group Interp 221 */
-      if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+      if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
        continue;
 
       /* Could also check open == '`' if we want to parse grouping constructs
diff --git a/parse.y~ b/parse.y~
new file mode 100644 (file)
index 0000000..056f918
--- /dev/null
+++ b/parse.y~
@@ -0,0 +1,6231 @@
+/* parse.y - Yacc grammar for bash. */
+
+/* Copyright (C) 1989-2012 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+%{
+#include "config.h"
+
+#include "bashtypes.h"
+#include "bashansi.h"
+
+#include "filecntl.h"
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#if defined (HAVE_LOCALE_H)
+#  include <locale.h>
+#endif
+
+#include <stdio.h>
+#include "chartypes.h"
+#include <signal.h>
+
+#include "memalloc.h"
+
+#include "bashintl.h"
+
+#define NEED_STRFTIME_DECL     /* used in externs.h */
+
+#include "shell.h"
+#include "typemax.h"           /* SIZE_MAX if needed */
+#include "trap.h"
+#include "flags.h"
+#include "parser.h"
+#include "mailcheck.h"
+#include "test.h"
+#include "builtins.h"
+#include "builtins/common.h"
+#include "builtins/builtext.h"
+
+#include "shmbutil.h"
+
+#if defined (READLINE)
+#  include "bashline.h"
+#  include <readline/readline.h>
+#endif /* READLINE */
+
+#if defined (HISTORY)
+#  include "bashhist.h"
+#  include <readline/history.h>
+#endif /* HISTORY */
+
+#if defined (JOB_CONTROL)
+#  include "jobs.h"
+#endif /* JOB_CONTROL */
+
+#if defined (ALIAS)
+#  include "alias.h"
+#else
+typedef void *alias_t;
+#endif /* ALIAS */
+
+#if defined (PROMPT_STRING_DECODE)
+#  ifndef _MINIX
+#    include <sys/param.h>
+#  endif
+#  include <time.h>
+#  if defined (TM_IN_SYS_TIME)
+#    include <sys/types.h>
+#    include <sys/time.h>
+#  endif /* TM_IN_SYS_TIME */
+#  include "maxpath.h"
+#endif /* PROMPT_STRING_DECODE */
+
+#define RE_READ_TOKEN  -99
+#define NO_EXPANSION   -100
+
+#ifdef DEBUG
+#  define YYDEBUG 1
+#else
+#  define YYDEBUG 0
+#endif
+
+#if defined (HANDLE_MULTIBYTE)
+#  define last_shell_getc_is_singlebyte \
+       ((shell_input_line_index > 1) \
+               ? shell_input_line_property[shell_input_line_index - 1] \
+               : 1)
+#  define MBTEST(x)    ((x) && last_shell_getc_is_singlebyte)
+#else
+#  define last_shell_getc_is_singlebyte        1
+#  define MBTEST(x)    ((x))
+#endif
+
+#if defined (EXTENDED_GLOB)
+extern int extended_glob;
+#endif
+
+extern int eof_encountered;
+extern int no_line_editing, running_under_emacs;
+extern int current_command_number;
+extern int sourcelevel, parse_and_execute_level;
+extern int posixly_correct;
+extern int last_command_exit_value;
+extern pid_t last_command_subst_pid;
+extern char *shell_name, *current_host_name;
+extern char *dist_version;
+extern int patch_level;
+extern int dump_translatable_strings, dump_po_strings;
+extern sh_builtin_func_t *last_shell_builtin, *this_shell_builtin;
+#if defined (BUFFERED_INPUT)
+extern int bash_input_fd_changed;
+#endif
+
+extern int errno;
+/* **************************************************************** */
+/*                                                                 */
+/*                 "Forward" declarations                          */
+/*                                                                 */
+/* **************************************************************** */
+
+#ifdef DEBUG
+static void debug_parser __P((int));
+#endif
+
+static int yy_getc __P((void));
+static int yy_ungetc __P((int));
+
+#if defined (READLINE)
+static int yy_readline_get __P((void));
+static int yy_readline_unget __P((int));
+#endif
+
+static int yy_string_get __P((void));
+static int yy_string_unget __P((int));
+static void rewind_input_string __P((void));
+static int yy_stream_get __P((void));
+static int yy_stream_unget __P((int));
+
+static int shell_getc __P((int));
+static void shell_ungetc __P((int));
+static void discard_until __P((int));
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+static void push_string __P((char *, int, alias_t *));
+static void pop_string __P((void));
+static void free_string_list __P((void));
+#endif
+
+static char *read_a_line __P((int));
+
+static int reserved_word_acceptable __P((int));
+static int yylex __P((void));
+static int alias_expand_token __P((char *));
+static int time_command_acceptable __P((void));
+static int special_case_tokens __P((char *));
+static int read_token __P((int));
+static char *parse_matched_pair __P((int, int, int, int *, int));
+static char *parse_comsub __P((int, int, int, int *, int));
+#if defined (ARRAY_VARS)
+static char *parse_compound_assignment __P((int *));
+#endif
+#if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
+static int parse_dparen __P((int));
+static int parse_arith_cmd __P((char **, int));
+#endif
+#if defined (COND_COMMAND)
+static void cond_error __P((void));
+static COND_COM *cond_expr __P((void));
+static COND_COM *cond_or __P((void));
+static COND_COM *cond_and __P((void));
+static COND_COM *cond_term __P((void));
+static int cond_skip_newlines __P((void));
+static COMMAND *parse_cond_command __P((void));
+#endif
+#if defined (ARRAY_VARS)
+static int token_is_assignment __P((char *, int));
+static int token_is_ident __P((char *, int));
+#endif
+static int read_token_word __P((int));
+static void discard_parser_constructs __P((int));
+
+static char *error_token_from_token __P((int));
+static char *error_token_from_text __P((void));
+static void print_offending_line __P((void));
+static void report_syntax_error __P((char *));
+
+static void handle_eof_input_unit __P((void));
+static void prompt_again __P((void));
+#if 0
+static void reset_readline_prompt __P((void));
+#endif
+static void print_prompt __P((void));
+
+#if defined (HANDLE_MULTIBYTE)
+static void set_line_mbstate __P((void));
+static char *shell_input_line_property = NULL;
+#else
+#  define set_line_mbstate()
+#endif
+
+extern int yyerror __P((const char *));
+
+#ifdef DEBUG
+extern int yydebug;
+#endif
+
+/* Default prompt strings */
+char *primary_prompt = PPROMPT;
+char *secondary_prompt = SPROMPT;
+
+/* PROMPT_STRING_POINTER points to one of these, never to an actual string. */
+char *ps1_prompt, *ps2_prompt;
+
+/* Handle on the current prompt string.  Indirectly points through
+   ps1_ or ps2_prompt. */
+char **prompt_string_pointer = (char **)NULL;
+char *current_prompt_string;
+
+/* Non-zero means we expand aliases in commands. */
+int expand_aliases = 0;
+
+/* If non-zero, the decoded prompt string undergoes parameter and
+   variable substitution, command substitution, arithmetic substitution,
+   string expansion, process substitution, and quote removal in
+   decode_prompt_string. */
+int promptvars = 1;
+
+/* If non-zero, $'...' and $"..." are expanded when they appear within
+   a ${...} expansion, even when the expansion appears within double
+   quotes. */
+int extended_quote = 1;
+
+/* The number of lines read from input while creating the current command. */
+int current_command_line_count;
+
+/* The number of lines in a command saved while we run parse_and_execute */
+int saved_command_line_count;
+
+/* The token that currently denotes the end of parse. */
+int shell_eof_token;
+
+/* The token currently being read. */
+int current_token;
+
+/* The current parser state. */
+int parser_state;
+
+/* Variables to manage the task of reading here documents, because we need to
+   defer the reading until after a complete command has been collected. */
+static REDIRECT *redir_stack[10];
+int need_here_doc;
+
+/* Where shell input comes from.  History expansion is performed on each
+   line when the shell is interactive. */
+static char *shell_input_line = (char *)NULL;
+static size_t shell_input_line_index;
+static size_t shell_input_line_size;   /* Amount allocated for shell_input_line. */
+static size_t shell_input_line_len;    /* strlen (shell_input_line) */
+
+/* Either zero or EOF. */
+static int shell_input_line_terminator;
+
+/* The line number in a script on which a function definition starts. */
+static int function_dstart;
+
+/* The line number in a script on which a function body starts. */
+static int function_bstart;
+
+/* The line number in a script at which an arithmetic for command starts. */
+static int arith_for_lineno;
+
+/* The decoded prompt string.  Used if READLINE is not defined or if
+   editing is turned off.  Analogous to current_readline_prompt. */
+static char *current_decoded_prompt;
+
+/* The last read token, or NULL.  read_token () uses this for context
+   checking. */
+static int last_read_token;
+
+/* The token read prior to last_read_token. */
+static int token_before_that;
+
+/* The token read prior to token_before_that. */
+static int two_tokens_ago;
+
+static int global_extglob;
+
+/* The line number in a script where the word in a `case WORD', `select WORD'
+   or `for WORD' begins.  This is a nested command maximum, since the array
+   index is decremented after a case, select, or for command is parsed. */
+#define MAX_CASE_NEST  128
+static int word_lineno[MAX_CASE_NEST];
+static int word_top = -1;
+
+/* If non-zero, it is the token that we want read_token to return
+   regardless of what text is (or isn't) present to be read.  This
+   is reset by read_token.  If token_to_read == WORD or
+   ASSIGNMENT_WORD, yylval.word should be set to word_desc_to_read. */
+static int token_to_read;
+static WORD_DESC *word_desc_to_read;
+
+static REDIRECTEE source;
+static REDIRECTEE redir;
+%}
+
+%union {
+  WORD_DESC *word;             /* the word that we read. */
+  int number;                  /* the number that we read. */
+  WORD_LIST *word_list;
+  COMMAND *command;
+  REDIRECT *redirect;
+  ELEMENT element;
+  PATTERN_LIST *pattern;
+}
+
+/* Reserved words.  Members of the first group are only recognized
+   in the case that they are preceded by a list_terminator.  Members
+   of the second group are for [[...]] commands.  Members of the
+   third group are recognized only under special circumstances. */
+%token IF THEN ELSE ELIF FI CASE ESAC FOR SELECT WHILE UNTIL DO DONE FUNCTION COPROC
+%token COND_START COND_END COND_ERROR
+%token IN BANG TIME TIMEOPT TIMEIGN
+
+/* More general tokens. yylex () knows how to make these. */
+%token <word> WORD ASSIGNMENT_WORD REDIR_WORD
+%token <number> NUMBER
+%token <word_list> ARITH_CMD ARITH_FOR_EXPRS
+%token <command> COND_CMD
+%token AND_AND OR_OR GREATER_GREATER LESS_LESS LESS_AND LESS_LESS_LESS
+%token GREATER_AND SEMI_SEMI SEMI_AND SEMI_SEMI_AND
+%token LESS_LESS_MINUS AND_GREATER AND_GREATER_GREATER LESS_GREATER
+%token GREATER_BAR BAR_AND
+
+/* The types that the various syntactical units return. */
+
+%type <command> inputunit command pipeline pipeline_command
+%type <command> list list0 list1 compound_list simple_list simple_list1
+%type <command> simple_command shell_command
+%type <command> for_command select_command case_command group_command
+%type <command> arith_command
+%type <command> cond_command
+%type <command> arith_for_command
+%type <command> coproc
+%type <command> function_def function_body if_command elif_clause subshell
+%type <redirect> redirection redirection_list
+%type <element> simple_command_element
+%type <word_list> word_list pattern
+%type <pattern> pattern_list case_clause_sequence case_clause
+%type <number> timespec
+%type <number> list_terminator
+
+%start inputunit
+
+%left '&' ';' '\n' yacc_EOF
+%left AND_AND OR_OR
+%right '|' BAR_AND
+%%
+
+inputunit:     simple_list simple_list_terminator
+                       {
+                         /* Case of regular command.  Discard the error
+                            safety net,and return the command just parsed. */
+                         global_command = $1;
+                         eof_encountered = 0;
+                         /* discard_parser_constructs (0); */
+                         if (parser_state & PST_CMDSUBST)
+                           parser_state |= PST_EOFTOKEN;
+                         YYACCEPT;
+                       }
+       |       '\n'
+                       {
+                         /* Case of regular command, but not a very
+                            interesting one.  Return a NULL command. */
+                         global_command = (COMMAND *)NULL;
+                         if (parser_state & PST_CMDSUBST)
+                           parser_state |= PST_EOFTOKEN;
+                         YYACCEPT;
+                       }
+       |       error '\n'
+                       {
+                         /* Error during parsing.  Return NULL command. */
+                         global_command = (COMMAND *)NULL;
+                         eof_encountered = 0;
+                         /* discard_parser_constructs (1); */
+                         if (interactive && parse_and_execute_level == 0)
+                           {
+                             YYACCEPT;
+                           }
+                         else
+                           {
+                             YYABORT;
+                           }
+                       }
+       |       yacc_EOF
+                       {
+                         /* Case of EOF seen by itself.  Do ignoreeof or
+                            not. */
+                         global_command = (COMMAND *)NULL;
+                         handle_eof_input_unit ();
+                         YYACCEPT;
+                       }
+       ;
+
+word_list:     WORD
+                       { $$ = make_word_list ($1, (WORD_LIST *)NULL); }
+       |       word_list WORD
+                       { $$ = make_word_list ($2, $1); }
+       ;
+
+redirection:   '>' WORD
+                       {
+                         source.dest = 1;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_output_direction, redir, 0);
+                       }
+       |       '<' WORD
+                       {
+                         source.dest = 0;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_input_direction, redir, 0);
+                       }
+       |       NUMBER '>' WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_output_direction, redir, 0);
+                       }
+       |       NUMBER '<' WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_input_direction, redir, 0);
+                       }
+       |       REDIR_WORD '>' WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_output_direction, redir, REDIR_VARASSIGN);
+                       }
+       |       REDIR_WORD '<' WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_input_direction, redir, REDIR_VARASSIGN);
+                       }
+       |       GREATER_GREATER WORD
+                       {
+                         source.dest = 1;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_appending_to, redir, 0);
+                       }
+       |       NUMBER GREATER_GREATER WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_appending_to, redir, 0);
+                       }
+       |       REDIR_WORD GREATER_GREATER WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_appending_to, redir, REDIR_VARASSIGN);
+                       }
+       |       GREATER_BAR WORD
+                       {
+                         source.dest = 1;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_output_force, redir, 0);
+                       }
+       |       NUMBER GREATER_BAR WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_output_force, redir, 0);
+                       }
+       |       REDIR_WORD GREATER_BAR WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_output_force, redir, REDIR_VARASSIGN);
+                       }
+       |       LESS_GREATER WORD
+                       {
+                         source.dest = 0;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_input_output, redir, 0);
+                       }
+       |       NUMBER LESS_GREATER WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_input_output, redir, 0);
+                       }
+       |       REDIR_WORD LESS_GREATER WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_input_output, redir, REDIR_VARASSIGN);
+                       }
+       |       LESS_LESS WORD
+                       {
+                         source.dest = 0;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_reading_until, redir, 0);
+                         redir_stack[need_here_doc++] = $$;
+                       }
+       |       NUMBER LESS_LESS WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_reading_until, redir, 0);
+                         redir_stack[need_here_doc++] = $$;
+                       }
+       |       REDIR_WORD LESS_LESS WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_reading_until, redir, REDIR_VARASSIGN);
+                         redir_stack[need_here_doc++] = $$;
+                       }
+       |       LESS_LESS_MINUS WORD
+                       {
+                         source.dest = 0;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
+                         redir_stack[need_here_doc++] = $$;
+                       }
+       |       NUMBER LESS_LESS_MINUS WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_deblank_reading_until, redir, 0);
+                         redir_stack[need_here_doc++] = $$;
+                       }
+       |       REDIR_WORD  LESS_LESS_MINUS WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_deblank_reading_until, redir, REDIR_VARASSIGN);
+                         redir_stack[need_here_doc++] = $$;
+                       }
+       |       LESS_LESS_LESS WORD
+                       {
+                         source.dest = 0;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_reading_string, redir, 0);
+                       }
+       |       NUMBER LESS_LESS_LESS WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_reading_string, redir, 0);
+                       }
+       |       REDIR_WORD LESS_LESS_LESS WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_reading_string, redir, REDIR_VARASSIGN);
+                       }
+       |       LESS_AND NUMBER
+                       {
+                         source.dest = 0;
+                         redir.dest = $2;
+                         $$ = make_redirection (source, r_duplicating_input, redir, 0);
+                       }
+       |       NUMBER LESS_AND NUMBER
+                       {
+                         source.dest = $1;
+                         redir.dest = $3;
+                         $$ = make_redirection (source, r_duplicating_input, redir, 0);
+                       }
+       |       REDIR_WORD LESS_AND NUMBER
+                       {
+                         source.filename = $1;
+                         redir.dest = $3;
+                         $$ = make_redirection (source, r_duplicating_input, redir, REDIR_VARASSIGN);
+                       }
+       |       GREATER_AND NUMBER
+                       {
+                         source.dest = 1;
+                         redir.dest = $2;
+                         $$ = make_redirection (source, r_duplicating_output, redir, 0);
+                       }
+       |       NUMBER GREATER_AND NUMBER
+                       {
+                         source.dest = $1;
+                         redir.dest = $3;
+                         $$ = make_redirection (source, r_duplicating_output, redir, 0);
+                       }
+       |       REDIR_WORD GREATER_AND NUMBER
+                       {
+                         source.filename = $1;
+                         redir.dest = $3;
+                         $$ = make_redirection (source, r_duplicating_output, redir, REDIR_VARASSIGN);
+                       }
+       |       LESS_AND WORD
+                       {
+                         source.dest = 0;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_duplicating_input_word, redir, 0);
+                       }
+       |       NUMBER LESS_AND WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_duplicating_input_word, redir, 0);
+                       }
+       |       REDIR_WORD LESS_AND WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_duplicating_input_word, redir, REDIR_VARASSIGN);
+                       }
+       |       GREATER_AND WORD
+                       {
+                         source.dest = 1;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_duplicating_output_word, redir, 0);
+                       }
+       |       NUMBER GREATER_AND WORD
+                       {
+                         source.dest = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_duplicating_output_word, redir, 0);
+                       }
+       |       REDIR_WORD GREATER_AND WORD
+                       {
+                         source.filename = $1;
+                         redir.filename = $3;
+                         $$ = make_redirection (source, r_duplicating_output_word, redir, REDIR_VARASSIGN);
+                       }
+       |       GREATER_AND '-'
+                       {
+                         source.dest = 1;
+                         redir.dest = 0;
+                         $$ = make_redirection (source, r_close_this, redir, 0);
+                       }
+       |       NUMBER GREATER_AND '-'
+                       {
+                         source.dest = $1;
+                         redir.dest = 0;
+                         $$ = make_redirection (source, r_close_this, redir, 0);
+                       }
+       |       REDIR_WORD GREATER_AND '-'
+                       {
+                         source.filename = $1;
+                         redir.dest = 0;
+                         $$ = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
+                       }
+       |       LESS_AND '-'
+                       {
+                         source.dest = 0;
+                         redir.dest = 0;
+                         $$ = make_redirection (source, r_close_this, redir, 0);
+                       }
+       |       NUMBER LESS_AND '-'
+                       {
+                         source.dest = $1;
+                         redir.dest = 0;
+                         $$ = make_redirection (source, r_close_this, redir, 0);
+                       }
+       |       REDIR_WORD LESS_AND '-'
+                       {
+                         source.filename = $1;
+                         redir.dest = 0;
+                         $$ = make_redirection (source, r_close_this, redir, REDIR_VARASSIGN);
+                       }
+       |       AND_GREATER WORD
+                       {
+                         source.dest = 1;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_err_and_out, redir, 0);
+                       }
+       |       AND_GREATER_GREATER WORD
+                       {
+                         source.dest = 1;
+                         redir.filename = $2;
+                         $$ = make_redirection (source, r_append_err_and_out, redir, 0);
+                       }
+       ;
+
+simple_command_element: WORD
+                       { $$.word = $1; $$.redirect = 0; }
+       |       ASSIGNMENT_WORD
+                       { $$.word = $1; $$.redirect = 0; }
+       |       redirection
+                       { $$.redirect = $1; $$.word = 0; }
+       ;
+
+redirection_list: redirection
+                       {
+                         $$ = $1;
+                       }
+       |       redirection_list redirection
+                       {
+                         register REDIRECT *t;
+
+                         for (t = $1; t->next; t = t->next)
+                           ;
+                         t->next = $2;
+                         $$ = $1;
+                       }
+       ;
+
+simple_command:        simple_command_element
+                       { $$ = make_simple_command ($1, (COMMAND *)NULL); }
+       |       simple_command simple_command_element
+                       { $$ = make_simple_command ($2, $1); }
+       ;
+
+command:       simple_command
+                       { $$ = clean_simple_command ($1); }
+       |       shell_command
+                       { $$ = $1; }
+       |       shell_command redirection_list
+                       {
+                         COMMAND *tc;
+
+                         tc = $1;
+                         if (tc->redirects)
+                           {
+                             register REDIRECT *t;
+                             for (t = tc->redirects; t->next; t = t->next)
+                               ;
+                             t->next = $2;
+                           }
+                         else
+                           tc->redirects = $2;
+                         $$ = $1;
+                       }
+       |       function_def
+                       { $$ = $1; }
+       |       coproc
+                       { $$ = $1; }
+       ;
+
+shell_command: for_command
+                       { $$ = $1; }
+       |       case_command
+                       { $$ = $1; }
+       |       WHILE compound_list DO compound_list DONE
+                       { $$ = make_while_command ($2, $4); }
+       |       UNTIL compound_list DO compound_list DONE
+                       { $$ = make_until_command ($2, $4); }
+       |       select_command
+                       { $$ = $1; }
+       |       if_command
+                       { $$ = $1; }
+       |       subshell
+                       { $$ = $1; }
+       |       group_command
+                       { $$ = $1; }
+       |       arith_command
+                       { $$ = $1; }
+       |       cond_command
+                       { $$ = $1; }
+       |       arith_for_command
+                       { $$ = $1; }
+       ;
+
+for_command:   FOR WORD newline_list DO compound_list DONE
+                       {
+                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       FOR WORD newline_list '{' compound_list '}'
+                       {
+                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       FOR WORD ';' newline_list DO compound_list DONE
+                       {
+                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       FOR WORD ';' newline_list '{' compound_list '}'
+                       {
+                         $$ = make_for_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       FOR WORD newline_list IN word_list list_terminator newline_list DO compound_list DONE
+                       {
+                         $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       FOR WORD newline_list IN word_list list_terminator newline_list '{' compound_list '}'
+                       {
+                         $$ = make_for_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       FOR WORD newline_list IN list_terminator newline_list DO compound_list DONE
+                       {
+                         $$ = make_for_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       FOR WORD newline_list IN list_terminator newline_list '{' compound_list '}'
+                       {
+                         $$ = make_for_command ($2, (WORD_LIST *)NULL, $8, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       ;
+
+arith_for_command:     FOR ARITH_FOR_EXPRS list_terminator newline_list DO compound_list DONE
+                               {
+                                 $$ = make_arith_for_command ($2, $6, arith_for_lineno);
+                                 if (word_top > 0) word_top--;
+                               }
+       |               FOR ARITH_FOR_EXPRS list_terminator newline_list '{' compound_list '}'
+                               {
+                                 $$ = make_arith_for_command ($2, $6, arith_for_lineno);
+                                 if (word_top > 0) word_top--;
+                               }
+       |               FOR ARITH_FOR_EXPRS DO compound_list DONE
+                               {
+                                 $$ = make_arith_for_command ($2, $4, arith_for_lineno);
+                                 if (word_top > 0) word_top--;
+                               }
+       |               FOR ARITH_FOR_EXPRS '{' compound_list '}'
+                               {
+                                 $$ = make_arith_for_command ($2, $4, arith_for_lineno);
+                                 if (word_top > 0) word_top--;
+                               }
+       ;
+
+select_command:        SELECT WORD newline_list DO list DONE
+                       {
+                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       SELECT WORD newline_list '{' list '}'
+                       {
+                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $5, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       SELECT WORD ';' newline_list DO list DONE
+                       {
+                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       SELECT WORD ';' newline_list '{' list '}'
+                       {
+                         $$ = make_select_command ($2, add_string_to_list ("\"$@\"", (WORD_LIST *)NULL), $6, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       SELECT WORD newline_list IN word_list list_terminator newline_list DO list DONE
+                       {
+                         $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       SELECT WORD newline_list IN word_list list_terminator newline_list '{' list '}'
+                       {
+                         $$ = make_select_command ($2, REVERSE_LIST ($5, WORD_LIST *), $9, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       ;
+
+case_command:  CASE WORD newline_list IN newline_list ESAC
+                       {
+                         $$ = make_case_command ($2, (PATTERN_LIST *)NULL, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       CASE WORD newline_list IN case_clause_sequence newline_list ESAC
+                       {
+                         $$ = make_case_command ($2, $5, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       |       CASE WORD newline_list IN case_clause ESAC
+                       {
+                         $$ = make_case_command ($2, $5, word_lineno[word_top]);
+                         if (word_top > 0) word_top--;
+                       }
+       ;
+
+function_def:  WORD '(' ')' newline_list function_body
+                       { $$ = make_function_def ($1, $5, function_dstart, function_bstart); }
+
+       |       FUNCTION WORD '(' ')' newline_list function_body
+                       { $$ = make_function_def ($2, $6, function_dstart, function_bstart); }
+
+       |       FUNCTION WORD newline_list function_body
+                       { $$ = make_function_def ($2, $4, function_dstart, function_bstart); }
+       ;
+
+function_body: shell_command
+                       { $$ = $1; }
+       |       shell_command redirection_list
+                       {
+                         COMMAND *tc;
+
+                         tc = $1;
+                         /* According to Posix.2 3.9.5, redirections
+                            specified after the body of a function should
+                            be attached to the function and performed when
+                            the function is executed, not as part of the
+                            function definition command. */
+                         /* XXX - I don't think it matters, but we might
+                            want to change this in the future to avoid
+                            problems differentiating between a function
+                            definition with a redirection and a function
+                            definition containing a single command with a
+                            redirection.  The two are semantically equivalent,
+                            though -- the only difference is in how the
+                            command printing code displays the redirections. */
+                         if (tc->redirects)
+                           {
+                             register REDIRECT *t;
+                             for (t = tc->redirects; t->next; t = t->next)
+                               ;
+                             t->next = $2;
+                           }
+                         else
+                           tc->redirects = $2;
+                         $$ = $1;
+                       }
+       ;
+
+subshell:      '(' compound_list ')'
+                       {
+                         $$ = make_subshell_command ($2);
+                         $$->flags |= CMD_WANT_SUBSHELL;
+                       }
+       ;
+
+coproc:                COPROC shell_command
+                       {
+                         $$ = make_coproc_command ("COPROC", $2);
+                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
+                       }
+       |       COPROC shell_command redirection_list
+                       {
+                         COMMAND *tc;
+
+                         tc = $2;
+                         if (tc->redirects)
+                           {
+                             register REDIRECT *t;
+                             for (t = tc->redirects; t->next; t = t->next)
+                               ;
+                             t->next = $3;
+                           }
+                         else
+                           tc->redirects = $3;
+                         $$ = make_coproc_command ("COPROC", $2);
+                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
+                       }
+       |       COPROC WORD shell_command
+                       {
+                         $$ = make_coproc_command ($2->word, $3);
+                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
+                       }
+       |       COPROC WORD shell_command redirection_list
+                       {
+                         COMMAND *tc;
+
+                         tc = $3;
+                         if (tc->redirects)
+                           {
+                             register REDIRECT *t;
+                             for (t = tc->redirects; t->next; t = t->next)
+                               ;
+                             t->next = $4;
+                           }
+                         else
+                           tc->redirects = $4;
+                         $$ = make_coproc_command ($2->word, $3);
+                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
+                       }
+       |       COPROC simple_command
+                       {
+                         $$ = make_coproc_command ("COPROC", clean_simple_command ($2));
+                         $$->flags |= CMD_WANT_SUBSHELL|CMD_COPROC_SUBSHELL;
+                       }
+       ;
+
+if_command:    IF compound_list THEN compound_list FI
+                       { $$ = make_if_command ($2, $4, (COMMAND *)NULL); }
+       |       IF compound_list THEN compound_list ELSE compound_list FI
+                       { $$ = make_if_command ($2, $4, $6); }
+       |       IF compound_list THEN compound_list elif_clause FI
+                       { $$ = make_if_command ($2, $4, $5); }
+       ;
+
+
+group_command: '{' compound_list '}'
+                       { $$ = make_group_command ($2); }
+       ;
+
+arith_command: ARITH_CMD
+                       { $$ = make_arith_command ($1); }
+       ;
+
+cond_command:  COND_START COND_CMD COND_END
+                       { $$ = $2; }
+       ; 
+
+elif_clause:   ELIF compound_list THEN compound_list
+                       { $$ = make_if_command ($2, $4, (COMMAND *)NULL); }
+       |       ELIF compound_list THEN compound_list ELSE compound_list
+                       { $$ = make_if_command ($2, $4, $6); }
+       |       ELIF compound_list THEN compound_list elif_clause
+                       { $$ = make_if_command ($2, $4, $5); }
+       ;
+
+case_clause:   pattern_list
+       |       case_clause_sequence pattern_list
+                       { $2->next = $1; $$ = $2; }
+       ;
+
+pattern_list:  newline_list pattern ')' compound_list
+                       { $$ = make_pattern_list ($2, $4); }
+       |       newline_list pattern ')' newline_list
+                       { $$ = make_pattern_list ($2, (COMMAND *)NULL); }
+       |       newline_list '(' pattern ')' compound_list
+                       { $$ = make_pattern_list ($3, $5); }
+       |       newline_list '(' pattern ')' newline_list
+                       { $$ = make_pattern_list ($3, (COMMAND *)NULL); }
+       ;
+
+case_clause_sequence:  pattern_list SEMI_SEMI
+                       { $$ = $1; }
+       |       case_clause_sequence pattern_list SEMI_SEMI
+                       { $2->next = $1; $$ = $2; }
+       |       pattern_list SEMI_AND
+                       { $1->flags |= CASEPAT_FALLTHROUGH; $$ = $1; }
+       |       case_clause_sequence pattern_list SEMI_AND
+                       { $2->flags |= CASEPAT_FALLTHROUGH; $2->next = $1; $$ = $2; }
+       |       pattern_list SEMI_SEMI_AND
+                       { $1->flags |= CASEPAT_TESTNEXT; $$ = $1; }
+       |       case_clause_sequence pattern_list SEMI_SEMI_AND
+                       { $2->flags |= CASEPAT_TESTNEXT; $2->next = $1; $$ = $2; }      
+       ;
+
+pattern:       WORD
+                       { $$ = make_word_list ($1, (WORD_LIST *)NULL); }
+       |       pattern '|' WORD
+                       { $$ = make_word_list ($3, $1); }
+       ;
+
+/* A list allows leading or trailing newlines and
+   newlines as operators (equivalent to semicolons).
+   It must end with a newline or semicolon.
+   Lists are used within commands such as if, for, while.  */
+
+list:          newline_list list0
+                       {
+                         $$ = $2;
+                         if (need_here_doc)
+                           gather_here_documents ();
+                        }
+       ;
+
+compound_list: list
+       |       newline_list list1
+                       {
+                         $$ = $2;
+                       }
+       ;
+
+list0:         list1 '\n' newline_list
+       |       list1 '&' newline_list
+                       {
+                         if ($1->type == cm_connection)
+                           $$ = connect_async_list ($1, (COMMAND *)NULL, '&');
+                         else
+                           $$ = command_connect ($1, (COMMAND *)NULL, '&');
+                       }
+       |       list1 ';' newline_list
+
+       ;
+
+list1:         list1 AND_AND newline_list list1
+                       { $$ = command_connect ($1, $4, AND_AND); }
+       |       list1 OR_OR newline_list list1
+                       { $$ = command_connect ($1, $4, OR_OR); }
+       |       list1 '&' newline_list list1
+                       {
+                         if ($1->type == cm_connection)
+                           $$ = connect_async_list ($1, $4, '&');
+                         else
+                           $$ = command_connect ($1, $4, '&');
+                       }
+       |       list1 ';' newline_list list1
+                       { $$ = command_connect ($1, $4, ';'); }
+       |       list1 '\n' newline_list list1
+                       { $$ = command_connect ($1, $4, ';'); }
+       |       pipeline_command
+                       { $$ = $1; }
+       ;
+
+simple_list_terminator:        '\n'
+       |       yacc_EOF
+       ;
+
+list_terminator:'\n'
+               { $$ = '\n'; }
+       |       ';'
+               { $$ = ';'; }
+       |       yacc_EOF
+               { $$ = yacc_EOF; }
+       ;
+
+newline_list:
+       |       newline_list '\n'
+       ;
+
+/* A simple_list is a list that contains no significant newlines
+   and no leading or trailing newlines.  Newlines are allowed
+   only following operators, where they are not significant.
+
+   This is what an inputunit consists of.  */
+
+simple_list:   simple_list1
+                       {
+                         $$ = $1;
+                         if (need_here_doc)
+                           gather_here_documents ();
+                         if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
+                           {
+                             global_command = $1;
+                             eof_encountered = 0;
+                             rewind_input_string ();
+                             YYACCEPT;
+                           }
+                       }
+       |       simple_list1 '&'
+                       {
+                         if ($1->type == cm_connection)
+                           $$ = connect_async_list ($1, (COMMAND *)NULL, '&');
+                         else
+                           $$ = command_connect ($1, (COMMAND *)NULL, '&');
+                         if (need_here_doc)
+                           gather_here_documents ();
+                         if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
+                           {
+                             global_command = $1;
+                             eof_encountered = 0;
+                             rewind_input_string ();
+                             YYACCEPT;
+                           }
+                       }
+       |       simple_list1 ';'
+                       {
+                         $$ = $1;
+                         if (need_here_doc)
+                           gather_here_documents ();
+                         if ((parser_state & PST_CMDSUBST) && current_token == shell_eof_token)
+                           {
+                             global_command = $1;
+                             eof_encountered = 0;
+                             rewind_input_string ();
+                             YYACCEPT;
+                           }
+                       }
+       ;
+
+simple_list1:  simple_list1 AND_AND newline_list simple_list1
+                       { $$ = command_connect ($1, $4, AND_AND); }
+       |       simple_list1 OR_OR newline_list simple_list1
+                       { $$ = command_connect ($1, $4, OR_OR); }
+       |       simple_list1 '&' simple_list1
+                       {
+                         if ($1->type == cm_connection)
+                           $$ = connect_async_list ($1, $3, '&');
+                         else
+                           $$ = command_connect ($1, $3, '&');
+                       }
+       |       simple_list1 ';' simple_list1
+                       { $$ = command_connect ($1, $3, ';'); }
+
+       |       pipeline_command
+                       { $$ = $1; }
+       ;
+
+pipeline_command: pipeline
+                       { $$ = $1; }                    
+       |       BANG pipeline_command
+                       {
+                         if ($2)
+                           $2->flags ^= CMD_INVERT_RETURN;     /* toggle */
+                         $$ = $2;
+                       }
+       |       timespec pipeline_command
+                       {
+                         if ($2)
+                           $2->flags |= $1;
+                         $$ = $2;
+                       }
+       |       timespec list_terminator
+                       {
+                         ELEMENT x;
+
+                         /* Boy, this is unclean.  `time' by itself can
+                            time a null command.  We cheat and push a
+                            newline back if the list_terminator was a newline
+                            to avoid the double-newline problem (one to
+                            terminate this, one to terminate the command) */
+                         x.word = 0;
+                         x.redirect = 0;
+                         $$ = make_simple_command (x, (COMMAND *)NULL);
+                         $$->flags |= $1;
+                         /* XXX - let's cheat and push a newline back */
+                         if ($2 == '\n')
+                           token_to_read = '\n';
+                       }
+       |       BANG list_terminator
+                       {
+                         ELEMENT x;
+
+                         /* This is just as unclean.  Posix says that `!'
+                            by itself should be equivalent to `false'.
+                            We cheat and push a
+                            newline back if the list_terminator was a newline
+                            to avoid the double-newline problem (one to
+                            terminate this, one to terminate the command) */
+                         x.word = 0;
+                         x.redirect = 0;
+                         $$ = make_simple_command (x, (COMMAND *)NULL);
+                         $$->flags |= CMD_INVERT_RETURN;
+                         /* XXX - let's cheat and push a newline back */
+                         if ($2 == '\n')
+                           token_to_read = '\n';
+                       }
+       ;
+
+pipeline:      pipeline '|' newline_list pipeline
+                       { $$ = command_connect ($1, $4, '|'); }
+       |       pipeline BAR_AND newline_list pipeline
+                       {
+                         /* Make cmd1 |& cmd2 equivalent to cmd1 2>&1 | cmd2 */
+                         COMMAND *tc;
+                         REDIRECTEE rd, sd;
+                         REDIRECT *r;
+
+                         tc = $1->type == cm_simple ? (COMMAND *)$1->value.Simple : $1;
+                         sd.dest = 2;
+                         rd.dest = 1;
+                         r = make_redirection (sd, r_duplicating_output, rd, 0);
+                         if (tc->redirects)
+                           {
+                             register REDIRECT *t;
+                             for (t = tc->redirects; t->next; t = t->next)
+                               ;
+                             t->next = r;
+                           }
+                         else
+                           tc->redirects = r;
+
+                         $$ = command_connect ($1, $4, '|');
+                       }
+       |       command
+                       { $$ = $1; }
+       ;
+
+timespec:      TIME
+                       { $$ = CMD_TIME_PIPELINE; }
+       |       TIME TIMEOPT
+                       { $$ = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+       |       TIME TIMEOPT TIMEIGN
+                       { $$ = CMD_TIME_PIPELINE|CMD_TIME_POSIX; }
+       ;
+%%
+
+/* Initial size to allocate for tokens, and the
+   amount to grow them by. */
+#define TOKEN_DEFAULT_INITIAL_SIZE 496
+#define TOKEN_DEFAULT_GROW_SIZE 512
+
+/* Should we call prompt_again? */
+#define SHOULD_PROMPT() \
+  (interactive && (bash_input.type == st_stdin || bash_input.type == st_stream))
+
+#if defined (ALIAS)
+#  define expanding_alias() (pushed_string_list && pushed_string_list->expander)
+#else
+#  define expanding_alias() 0
+#endif
+
+/* Global var is non-zero when end of file has been reached. */
+int EOF_Reached = 0;
+
+#ifdef DEBUG
+static void
+debug_parser (i)
+     int i;
+{
+#if YYDEBUG != 0
+  yydebug = i;
+#endif
+}
+#endif
+
+/* yy_getc () returns the next available character from input or EOF.
+   yy_ungetc (c) makes `c' the next character to read.
+   init_yy_io (get, unget, type, location) makes the function GET the
+   installed function for getting the next character, makes UNGET the
+   installed function for un-getting a character, sets the type of stream
+   (either string or file) from TYPE, and makes LOCATION point to where
+   the input is coming from. */
+
+/* Unconditionally returns end-of-file. */
+int
+return_EOF ()
+{
+  return (EOF);
+}
+
+/* Variable containing the current get and unget functions.
+   See ./input.h for a clearer description. */
+BASH_INPUT bash_input;
+
+/* Set all of the fields in BASH_INPUT to NULL.  Free bash_input.name if it
+   is non-null, avoiding a memory leak. */
+void
+initialize_bash_input ()
+{
+  bash_input.type = st_none;
+  FREE (bash_input.name);
+  bash_input.name = (char *)NULL;
+  bash_input.location.file = (FILE *)NULL;
+  bash_input.location.string = (char *)NULL;
+  bash_input.getter = (sh_cget_func_t *)NULL;
+  bash_input.ungetter = (sh_cunget_func_t *)NULL;
+}
+
+/* Set the contents of the current bash input stream from
+   GET, UNGET, TYPE, NAME, and LOCATION. */
+void
+init_yy_io (get, unget, type, name, location)
+     sh_cget_func_t *get;
+     sh_cunget_func_t *unget;
+     enum stream_type type;
+     const char *name;
+     INPUT_STREAM location;
+{
+  bash_input.type = type;
+  FREE (bash_input.name);
+  bash_input.name = name ? savestring (name) : (char *)NULL;
+
+  /* XXX */
+#if defined (CRAY)
+  memcpy((char *)&bash_input.location.string, (char *)&location.string, sizeof(location));
+#else
+  bash_input.location = location;
+#endif
+  bash_input.getter = get;
+  bash_input.ungetter = unget;
+}
+
+char *
+yy_input_name ()
+{
+  return (bash_input.name ? bash_input.name : "stdin");
+}
+
+/* Call this to get the next character of input. */
+static int
+yy_getc ()
+{
+  return (*(bash_input.getter)) ();
+}
+
+/* Call this to unget C.  That is, to make C the next character
+   to be read. */
+static int
+yy_ungetc (c)
+     int c;
+{
+  return (*(bash_input.ungetter)) (c);
+}
+
+#if defined (BUFFERED_INPUT)
+#ifdef INCLUDE_UNUSED
+int
+input_file_descriptor ()
+{
+  switch (bash_input.type)
+    {
+    case st_stream:
+      return (fileno (bash_input.location.file));
+    case st_bstream:
+      return (bash_input.location.buffered_fd);
+    case st_stdin:
+    default:
+      return (fileno (stdin));
+    }
+}
+#endif
+#endif /* BUFFERED_INPUT */
+
+/* **************************************************************** */
+/*                                                                 */
+/*               Let input be read from readline ().               */
+/*                                                                 */
+/* **************************************************************** */
+
+#if defined (READLINE)
+char *current_readline_prompt = (char *)NULL;
+char *current_readline_line = (char *)NULL;
+int current_readline_line_index = 0;
+
+static int
+yy_readline_get ()
+{
+  SigHandler *old_sigint;
+  int line_len;
+  unsigned char c;
+
+  if (!current_readline_line)
+    {
+      if (!bash_readline_initialized)
+       initialize_readline ();
+
+#if defined (JOB_CONTROL)
+      if (job_control)
+       give_terminal_to (shell_pgrp, 0);
+#endif /* JOB_CONTROL */
+
+      old_sigint = (SigHandler *)IMPOSSIBLE_TRAP_HANDLER;
+      if (signal_is_ignored (SIGINT) == 0)
+       {
+         /* interrupt_immediately++; */
+         old_sigint = (SigHandler *)set_signal_handler (SIGINT, sigint_sighandler);
+       }
+
+      current_readline_line = readline (current_readline_prompt ?
+                                         current_readline_prompt : "");
+
+      CHECK_TERMSIG;
+      if (signal_is_ignored (SIGINT) == 0)
+       {
+         /* interrupt_immediately--; */
+         if (old_sigint != IMPOSSIBLE_TRAP_HANDLER)
+           set_signal_handler (SIGINT, old_sigint);
+       }
+
+#if 0
+      /* Reset the prompt to the decoded value of prompt_string_pointer. */
+      reset_readline_prompt ();
+#endif
+
+      if (current_readline_line == 0)
+       return (EOF);
+
+      current_readline_line_index = 0;
+      line_len = strlen (current_readline_line);
+
+      current_readline_line = (char *)xrealloc (current_readline_line, 2 + line_len);
+      current_readline_line[line_len++] = '\n';
+      current_readline_line[line_len] = '\0';
+    }
+
+  if (current_readline_line[current_readline_line_index] == 0)
+    {
+      free (current_readline_line);
+      current_readline_line = (char *)NULL;
+      return (yy_readline_get ());
+    }
+  else
+    {
+      c = current_readline_line[current_readline_line_index++];
+      return (c);
+    }
+}
+
+static int
+yy_readline_unget (c)
+     int c;
+{
+  if (current_readline_line_index && current_readline_line)
+    current_readline_line[--current_readline_line_index] = c;
+  return (c);
+}
+
+void
+with_input_from_stdin ()
+{
+  INPUT_STREAM location;
+
+  if (bash_input.type != st_stdin && stream_on_stack (st_stdin) == 0)
+    {
+      location.string = current_readline_line;
+      init_yy_io (yy_readline_get, yy_readline_unget,
+                 st_stdin, "readline stdin", location);
+    }
+}
+
+#else  /* !READLINE */
+
+void
+with_input_from_stdin ()
+{
+  with_input_from_stream (stdin, "stdin");
+}
+#endif /* !READLINE */
+
+/* **************************************************************** */
+/*                                                                 */
+/*   Let input come from STRING.  STRING is zero terminated.       */
+/*                                                                 */
+/* **************************************************************** */
+
+static int
+yy_string_get ()
+{
+  register char *string;
+  register unsigned char c;
+
+  string = bash_input.location.string;
+
+  /* If the string doesn't exist, or is empty, EOF found. */
+  if (string && *string)
+    {
+      c = *string++;
+      bash_input.location.string = string;
+      return (c);
+    }
+  else
+    return (EOF);
+}
+
+static int
+yy_string_unget (c)
+     int c;
+{
+  *(--bash_input.location.string) = c;
+  return (c);
+}
+
+void
+with_input_from_string (string, name)
+     char *string;
+     const char *name;
+{
+  INPUT_STREAM location;
+
+  location.string = string;
+  init_yy_io (yy_string_get, yy_string_unget, st_string, name, location);
+}
+
+/* Count the number of characters we've consumed from bash_input.location.string
+   and read into shell_input_line, but have not returned from shell_getc.
+   That is the true input location.  Rewind bash_input.location.string by
+   that number of characters, so it points to the last character actually
+   consumed by the parser. */
+static void
+rewind_input_string ()
+{
+  int xchars;
+
+  /* number of unconsumed characters in the input -- XXX need to take newlines
+     into account, e.g., $(...\n) */
+  xchars = shell_input_line_len - shell_input_line_index;
+  if (bash_input.location.string[-1] == '\n')
+    xchars++;
+
+  /* XXX - how to reflect bash_input.location.string back to string passed to
+     parse_and_execute or xparse_dolparen?  xparse_dolparen needs to know how
+     far into the string we parsed.  parse_and_execute knows where bash_input.
+     location.string is, and how far from orig_string that is -- that's the
+     number of characters the command consumed. */
+
+  /* bash_input.location.string - xchars should be where we parsed to */
+  /* need to do more validation on xchars value for sanity -- test cases. */
+  bash_input.location.string -= xchars;
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*                  Let input come from STREAM.                    */
+/*                                                                 */
+/* **************************************************************** */
+
+/* These two functions used to test the value of the HAVE_RESTARTABLE_SYSCALLS
+   define, and just use getc/ungetc if it was defined, but since bash
+   installs its signal handlers without the SA_RESTART flag, some signals
+   (like SIGCHLD, SIGWINCH, etc.) received during a read(2) will not cause
+   the read to be restarted.  We need to restart it ourselves. */
+
+static int
+yy_stream_get ()
+{
+  int result;
+
+  result = EOF;
+  if (bash_input.location.file)
+    {
+#if 0
+      if (interactive)
+       interrupt_immediately++;
+#endif
+
+      /* XXX - don't need terminate_immediately; getc_with_restart checks
+        for terminating signals itself if read returns < 0 */
+      result = getc_with_restart (bash_input.location.file);
+
+#if 0
+      if (interactive)
+       interrupt_immediately--;
+#endif
+    }
+  return (result);
+}
+
+static int
+yy_stream_unget (c)
+     int c;
+{
+  return (ungetc_with_restart (c, bash_input.location.file));
+}
+
+void
+with_input_from_stream (stream, name)
+     FILE *stream;
+     const char *name;
+{
+  INPUT_STREAM location;
+
+  location.file = stream;
+  init_yy_io (yy_stream_get, yy_stream_unget, st_stream, name, location);
+}
+
+typedef struct stream_saver {
+  struct stream_saver *next;
+  BASH_INPUT bash_input;
+  int line;
+#if defined (BUFFERED_INPUT)
+  BUFFERED_STREAM *bstream;
+#endif /* BUFFERED_INPUT */
+} STREAM_SAVER;
+
+/* The globally known line number. */
+int line_number = 0;
+
+/* The line number offset set by assigning to LINENO.  Not currently used. */
+int line_number_base = 0;
+
+#if defined (COND_COMMAND)
+static int cond_lineno;
+static int cond_token;
+#endif
+
+STREAM_SAVER *stream_list = (STREAM_SAVER *)NULL;
+
+void
+push_stream (reset_lineno)
+     int reset_lineno;
+{
+  STREAM_SAVER *saver = (STREAM_SAVER *)xmalloc (sizeof (STREAM_SAVER));
+
+  xbcopy ((char *)&bash_input, (char *)&(saver->bash_input), sizeof (BASH_INPUT));
+
+#if defined (BUFFERED_INPUT)
+  saver->bstream = (BUFFERED_STREAM *)NULL;
+  /* If we have a buffered stream, clear out buffers[fd]. */
+  if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0)
+    saver->bstream = set_buffered_stream (bash_input.location.buffered_fd,
+                                         (BUFFERED_STREAM *)NULL);
+#endif /* BUFFERED_INPUT */
+
+  saver->line = line_number;
+  bash_input.name = (char *)NULL;
+  saver->next = stream_list;
+  stream_list = saver;
+  EOF_Reached = 0;
+  if (reset_lineno)
+    line_number = 0;
+}
+
+void
+pop_stream ()
+{
+  if (!stream_list)
+    EOF_Reached = 1;
+  else
+    {
+      STREAM_SAVER *saver = stream_list;
+
+      EOF_Reached = 0;
+      stream_list = stream_list->next;
+
+      init_yy_io (saver->bash_input.getter,
+                 saver->bash_input.ungetter,
+                 saver->bash_input.type,
+                 saver->bash_input.name,
+                 saver->bash_input.location);
+
+#if defined (BUFFERED_INPUT)
+      /* If we have a buffered stream, restore buffers[fd]. */
+      /* If the input file descriptor was changed while this was on the
+        save stack, update the buffered fd to the new file descriptor and
+        re-establish the buffer <-> bash_input fd correspondence. */
+      if (bash_input.type == st_bstream && bash_input.location.buffered_fd >= 0)
+       {
+         if (bash_input_fd_changed)
+           {
+             bash_input_fd_changed = 0;
+             if (default_buffered_input >= 0)
+               {
+                 bash_input.location.buffered_fd = default_buffered_input;
+                 saver->bstream->b_fd = default_buffered_input;
+                 SET_CLOSE_ON_EXEC (default_buffered_input);
+               }
+           }
+         /* XXX could free buffered stream returned as result here. */
+         set_buffered_stream (bash_input.location.buffered_fd, saver->bstream);
+       }
+#endif /* BUFFERED_INPUT */
+
+      line_number = saver->line;
+
+      FREE (saver->bash_input.name);
+      free (saver);
+    }
+}
+
+/* Return 1 if a stream of type TYPE is saved on the stack. */
+int
+stream_on_stack (type)
+     enum stream_type type;
+{
+  register STREAM_SAVER *s;
+
+  for (s = stream_list; s; s = s->next)
+    if (s->bash_input.type == type)
+      return 1;
+  return 0;
+}
+
+/* Save the current token state and return it in a malloced array. */
+int *
+save_token_state ()
+{
+  int *ret;
+
+  ret = (int *)xmalloc (4 * sizeof (int));
+  ret[0] = last_read_token;
+  ret[1] = token_before_that;
+  ret[2] = two_tokens_ago;
+  ret[3] = current_token;
+  return ret;
+}
+
+void
+restore_token_state (ts)
+     int *ts;
+{
+  if (ts == 0)
+    return;
+  last_read_token = ts[0];
+  token_before_that = ts[1];
+  two_tokens_ago = ts[2];
+  current_token = ts[3];
+}
+
+/*
+ * This is used to inhibit alias expansion and reserved word recognition
+ * inside case statement pattern lists.  A `case statement pattern list' is:
+ *
+ *     everything between the `in' in a `case word in' and the next ')'
+ *     or `esac'
+ *     everything between a `;;' and the next `)' or `esac'
+ */
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+
+#define END_OF_ALIAS 0
+
+/*
+ * Pseudo-global variables used in implementing token-wise alias expansion.
+ */
+
+/*
+ * Pushing and popping strings.  This works together with shell_getc to
+ * implement alias expansion on a per-token basis.
+ */
+
+#define PSH_ALIAS      0x01
+#define PSH_DPAREN     0x02
+#define PSH_SOURCE     0x04
+
+typedef struct string_saver {
+  struct string_saver *next;
+  int expand_alias;  /* Value to set expand_alias to when string is popped. */
+  char *saved_line;
+#if defined (ALIAS)
+  alias_t *expander;   /* alias that caused this line to be pushed. */
+#endif
+  size_t saved_line_size, saved_line_index;
+  int saved_line_terminator;
+  int flags;
+} STRING_SAVER;
+
+STRING_SAVER *pushed_string_list = (STRING_SAVER *)NULL;
+
+/*
+ * Push the current shell_input_line onto a stack of such lines and make S
+ * the current input.  Used when expanding aliases.  EXPAND is used to set
+ * the value of expand_next_token when the string is popped, so that the
+ * word after the alias in the original line is handled correctly when the
+ * alias expands to multiple words.  TOKEN is the token that was expanded
+ * into S; it is saved and used to prevent infinite recursive expansion.
+ */
+static void
+push_string (s, expand, ap)
+     char *s;
+     int expand;
+     alias_t *ap;
+{
+  STRING_SAVER *temp = (STRING_SAVER *)xmalloc (sizeof (STRING_SAVER));
+
+  temp->expand_alias = expand;
+  temp->saved_line = shell_input_line;
+  temp->saved_line_size = shell_input_line_size;
+  temp->saved_line_index = shell_input_line_index;
+  temp->saved_line_terminator = shell_input_line_terminator;
+  temp->flags = 0;
+#if defined (ALIAS)
+  temp->expander = ap;
+  if (ap)
+    temp->flags = PSH_ALIAS;
+#endif
+  temp->next = pushed_string_list;
+  pushed_string_list = temp;
+
+#if defined (ALIAS)
+  if (ap)
+    ap->flags |= AL_BEINGEXPANDED;
+#endif
+
+  shell_input_line = s;
+  shell_input_line_size = STRLEN (s);
+  shell_input_line_index = 0;
+  shell_input_line_terminator = '\0';
+#if 0
+  parser_state &= ~PST_ALEXPNEXT;      /* XXX */
+#endif
+
+  set_line_mbstate ();
+}
+
+/*
+ * Make the top of the pushed_string stack be the current shell input.
+ * Only called when there is something on the stack.  Called from shell_getc
+ * when it thinks it has consumed the string generated by an alias expansion
+ * and needs to return to the original input line.
+ */
+static void
+pop_string ()
+{
+  STRING_SAVER *t;
+
+  FREE (shell_input_line);
+  shell_input_line = pushed_string_list->saved_line;
+  shell_input_line_index = pushed_string_list->saved_line_index;
+  shell_input_line_size = pushed_string_list->saved_line_size;
+  shell_input_line_terminator = pushed_string_list->saved_line_terminator;
+
+  if (pushed_string_list->expand_alias)
+    parser_state |= PST_ALEXPNEXT;
+  else
+    parser_state &= ~PST_ALEXPNEXT;
+
+  t = pushed_string_list;
+  pushed_string_list = pushed_string_list->next;
+
+#if defined (ALIAS)
+  if (t->expander)
+    t->expander->flags &= ~AL_BEINGEXPANDED;
+#endif
+
+  free ((char *)t);
+
+  set_line_mbstate ();
+}
+
+static void
+free_string_list ()
+{
+  register STRING_SAVER *t, *t1;
+
+  for (t = pushed_string_list; t; )
+    {
+      t1 = t->next;
+      FREE (t->saved_line);
+#if defined (ALIAS)
+      if (t->expander)
+       t->expander->flags &= ~AL_BEINGEXPANDED;
+#endif
+      free ((char *)t);
+      t = t1;
+    }
+  pushed_string_list = (STRING_SAVER *)NULL;
+}
+
+#endif /* ALIAS || DPAREN_ARITHMETIC */
+
+void
+free_pushed_string_input ()
+{
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  free_string_list ();
+#endif
+}
+
+int
+parser_expanding_alias ()
+{
+  return (expanding_alias ());
+}
+
+void
+parser_save_alias ()
+{
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  push_string ((char *)NULL, 0, (alias_t *)NULL);
+  pushed_string_list->flags = PSH_SOURCE;      /* XXX - for now */
+#else
+  ;
+#endif
+}
+
+void
+parser_restore_alias ()
+{
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  if (pushed_string_list)
+    pop_string ();
+#else
+  ;
+#endif
+}
+
+/* Return a line of text, taken from wherever yylex () reads input.
+   If there is no more input, then we return NULL.  If REMOVE_QUOTED_NEWLINE
+   is non-zero, we remove unquoted \<newline> pairs.  This is used by
+   read_secondary_line to read here documents. */
+static char *
+read_a_line (remove_quoted_newline)
+     int remove_quoted_newline;
+{
+  static char *line_buffer = (char *)NULL;
+  static int buffer_size = 0;
+  int indx, c, peekc, pass_next;
+
+#if defined (READLINE)
+  if (no_line_editing && SHOULD_PROMPT ())
+#else
+  if (SHOULD_PROMPT ())
+#endif
+    print_prompt ();
+
+  pass_next = indx = 0;
+  while (1)
+    {
+      /* Allow immediate exit if interrupted during input. */
+      QUIT;
+
+      c = yy_getc ();
+
+      /* Ignore null bytes in input. */
+      if (c == 0)
+       {
+#if 0
+         internal_warning ("read_a_line: ignored null byte in input");
+#endif
+         continue;
+       }
+
+      /* If there is no more input, then we return NULL. */
+      if (c == EOF)
+       {
+         if (interactive && bash_input.type == st_stream)
+           clearerr (stdin);
+         if (indx == 0)
+           return ((char *)NULL);
+         c = '\n';
+       }
+
+      /* `+2' in case the final character in the buffer is a newline. */
+      RESIZE_MALLOCED_BUFFER (line_buffer, indx, 2, buffer_size, 128);
+
+      /* IF REMOVE_QUOTED_NEWLINES is non-zero, we are reading a
+        here document with an unquoted delimiter.  In this case,
+        the line will be expanded as if it were in double quotes.
+        We allow a backslash to escape the next character, but we
+        need to treat the backslash specially only if a backslash
+        quoting a backslash-newline pair appears in the line. */
+      if (pass_next)
+       {
+         line_buffer[indx++] = c;
+         pass_next = 0;
+       }
+      else if (c == '\\' && remove_quoted_newline)
+       {
+         QUIT;
+         peekc = yy_getc ();
+         if (peekc == '\n')
+           {
+             line_number++;
+             continue; /* Make the unquoted \<newline> pair disappear. */
+           }
+         else
+           {
+             yy_ungetc (peekc);
+             pass_next = 1;
+             line_buffer[indx++] = c;          /* Preserve the backslash. */
+           }
+       }
+      else
+       line_buffer[indx++] = c;
+
+      if (c == '\n')
+       {
+         line_buffer[indx] = '\0';
+         return (line_buffer);
+       }
+    }
+}
+
+/* Return a line as in read_a_line (), but insure that the prompt is
+   the secondary prompt.  This is used to read the lines of a here
+   document.  REMOVE_QUOTED_NEWLINE is non-zero if we should remove
+   newlines quoted with backslashes while reading the line.  It is
+   non-zero unless the delimiter of the here document was quoted. */
+char *
+read_secondary_line (remove_quoted_newline)
+     int remove_quoted_newline;
+{
+  char *ret;
+  int n, c;
+
+  prompt_string_pointer = &ps2_prompt;
+  if (SHOULD_PROMPT())
+    prompt_again ();
+  ret = read_a_line (remove_quoted_newline);
+#if defined (HISTORY)
+  if (ret && remember_on_history && (parser_state & PST_HEREDOC))
+    {
+      /* To make adding the the here-document body right, we need to rely
+        on history_delimiting_chars() returning \n for the first line of
+        the here-document body and the null string for the second and
+        subsequent lines, so we avoid double newlines.
+        current_command_line_count == 2 for the first line of the body. */
+
+      current_command_line_count++;
+      maybe_add_history (ret);
+    }
+#endif /* HISTORY */
+  return ret;
+}
+
+/* **************************************************************** */
+/*                                                                 */
+/*                             YYLEX ()                            */
+/*                                                                 */
+/* **************************************************************** */
+
+/* Reserved words.  These are only recognized as the first word of a
+   command. */
+STRING_INT_ALIST word_token_alist[] = {
+  { "if", IF },
+  { "then", THEN },
+  { "else", ELSE },
+  { "elif", ELIF },
+  { "fi", FI },
+  { "case", CASE },
+  { "esac", ESAC },
+  { "for", FOR },
+#if defined (SELECT_COMMAND)
+  { "select", SELECT },
+#endif
+  { "while", WHILE },
+  { "until", UNTIL },
+  { "do", DO },
+  { "done", DONE },
+  { "in", IN },
+  { "function", FUNCTION },
+#if defined (COMMAND_TIMING)
+  { "time", TIME },
+#endif
+  { "{", '{' },
+  { "}", '}' },
+  { "!", BANG },
+#if defined (COND_COMMAND)
+  { "[[", COND_START },
+  { "]]", COND_END },
+#endif
+#if defined (COPROCESS_SUPPORT)
+  { "coproc", COPROC },
+#endif
+  { (char *)NULL, 0}
+};
+
+/* other tokens that can be returned by read_token() */
+STRING_INT_ALIST other_token_alist[] = {
+  /* Multiple-character tokens with special values */
+  { "--", TIMEIGN },
+  { "-p", TIMEOPT },
+  { "&&", AND_AND },
+  { "||", OR_OR },
+  { ">>", GREATER_GREATER },
+  { "<<", LESS_LESS },
+  { "<&", LESS_AND },
+  { ">&", GREATER_AND },
+  { ";;", SEMI_SEMI },
+  { ";&", SEMI_AND },
+  { ";;&", SEMI_SEMI_AND },
+  { "<<-", LESS_LESS_MINUS },
+  { "<<<", LESS_LESS_LESS },
+  { "&>", AND_GREATER },
+  { "&>>", AND_GREATER_GREATER },
+  { "<>", LESS_GREATER },
+  { ">|", GREATER_BAR },
+  { "|&", BAR_AND },
+  { "EOF", yacc_EOF },
+  /* Tokens whose value is the character itself */
+  { ">", '>' },
+  { "<", '<' },
+  { "-", '-' },
+  { "{", '{' },
+  { "}", '}' },
+  { ";", ';' },
+  { "(", '(' },
+  { ")", ')' },
+  { "|", '|' },
+  { "&", '&' },
+  { "newline", '\n' },
+  { (char *)NULL, 0}
+};
+
+/* others not listed here:
+       WORD                    look at yylval.word
+       ASSIGNMENT_WORD         look at yylval.word
+       NUMBER                  look at yylval.number
+       ARITH_CMD               look at yylval.word_list
+       ARITH_FOR_EXPRS         look at yylval.word_list
+       COND_CMD                look at yylval.command
+*/
+
+/* These are used by read_token_word, but appear up here so that shell_getc
+   can use them to decide when to add otherwise blank lines to the history. */
+
+/* The primary delimiter stack. */
+struct dstack dstack = {  (char *)NULL, 0, 0 };
+
+/* A temporary delimiter stack to be used when decoding prompt strings.
+   This is needed because command substitutions in prompt strings (e.g., PS2)
+   can screw up the parser's quoting state. */
+static struct dstack temp_dstack = { (char *)NULL, 0, 0 };
+
+/* Macro for accessing the top delimiter on the stack.  Returns the
+   delimiter or zero if none. */
+#define current_delimiter(ds) \
+  (ds.delimiter_depth ? ds.delimiters[ds.delimiter_depth - 1] : 0)
+
+#define push_delimiter(ds, character) \
+  do \
+    { \
+      if (ds.delimiter_depth + 2 > ds.delimiter_space) \
+       ds.delimiters = (char *)xrealloc \
+         (ds.delimiters, (ds.delimiter_space += 10) * sizeof (char)); \
+      ds.delimiters[ds.delimiter_depth] = character; \
+      ds.delimiter_depth++; \
+    } \
+  while (0)
+
+#define pop_delimiter(ds)      ds.delimiter_depth--
+
+/* Return the next shell input character.  This always reads characters
+   from shell_input_line; when that line is exhausted, it is time to
+   read the next line.  This is called by read_token when the shell is
+   processing normal command input. */
+
+/* This implements one-character lookahead/lookbehind across physical input
+   lines, to avoid something being lost because it's pushed back with
+   shell_ungetc when we're at the start of a line. */
+static int eol_ungetc_lookahead = 0;
+
+static int
+shell_getc (remove_quoted_newline)
+     int remove_quoted_newline;
+{
+  register int i;
+  int c, truncating;
+  unsigned char uc;
+
+  QUIT;
+
+  if (sigwinch_received)
+    {
+      sigwinch_received = 0;
+      get_new_window_size (0, (int *)0, (int *)0);
+    }
+      
+  if (eol_ungetc_lookahead)
+    {
+      c = eol_ungetc_lookahead;
+      eol_ungetc_lookahead = 0;
+      return (c);
+    }
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  /* If shell_input_line[shell_input_line_index] == 0, but there is
+     something on the pushed list of strings, then we don't want to go
+     off and get another line.  We let the code down below handle it. */
+
+  if (!shell_input_line || ((!shell_input_line[shell_input_line_index]) &&
+                           (pushed_string_list == (STRING_SAVER *)NULL)))
+#else /* !ALIAS && !DPAREN_ARITHMETIC */
+  if (!shell_input_line || !shell_input_line[shell_input_line_index])
+#endif /* !ALIAS && !DPAREN_ARITHMETIC */
+    {
+      line_number++;
+
+      /* Let's not let one really really long line blow up memory allocation */
+      if (shell_input_line && shell_input_line_size >= 32768)
+       {
+         free (shell_input_line);
+         shell_input_line = 0;
+         shell_input_line_size = 0;
+       }
+
+    restart_read:
+
+      /* Allow immediate exit if interrupted during input. */
+      QUIT;
+
+      i = truncating = 0;
+      shell_input_line_terminator = 0;
+
+      /* If the shell is interatctive, but not currently printing a prompt
+         (interactive_shell && interactive == 0), we don't want to print
+         notifies or cleanup the jobs -- we want to defer it until we do
+         print the next prompt. */
+      if (interactive_shell == 0 || SHOULD_PROMPT())
+       {
+#if defined (JOB_CONTROL)
+      /* This can cause a problem when reading a command as the result
+        of a trap, when the trap is called from flush_child.  This call
+        had better not cause jobs to disappear from the job table in
+        that case, or we will have big trouble. */
+         notify_and_cleanup ();
+#else /* !JOB_CONTROL */
+         cleanup_dead_jobs ();
+#endif /* !JOB_CONTROL */
+       }
+
+#if defined (READLINE)
+      if (no_line_editing && SHOULD_PROMPT())
+#else
+      if (SHOULD_PROMPT())
+#endif
+       print_prompt ();
+
+      if (bash_input.type == st_stream)
+       clearerr (stdin);
+
+      while (1)
+       {
+         c = yy_getc ();
+
+         /* Allow immediate exit if interrupted during input. */
+         QUIT;
+
+         if (c == '\0')
+           {
+#if 0
+             internal_warning ("shell_getc: ignored null byte in input");
+#endif
+             continue;
+           }
+
+         /* Theoretical overflow */
+         /* If we can't put 256 bytes more into the buffer, allocate
+            everything we can and fill it as full as we can. */
+         /* XXX - we ignore rest of line using `truncating' flag */
+         if (shell_input_line_size > (SIZE_MAX - 256))
+           {
+             size_t n;
+
+             n = SIZE_MAX - i; /* how much more can we put into the buffer? */
+             if (n <= 2)       /* we have to save 1 for the newline added below */
+               {
+                 if (truncating == 0)
+                   internal_warning("shell_getc: shell_input_line_size (%zu) exceeds SIZE_MAX (%llu): line truncated", shell_input_line_size, SIZE_MAX);
+                 shell_input_line[i] = '\0';
+                 truncating = 1;
+               }
+             if (shell_input_line_size < SIZE_MAX)
+               {
+                 shell_input_line_size = SIZE_MAX;
+                 shell_input_line = xrealloc (shell_input_line, shell_input_line_size);
+               }
+           }
+         else
+           RESIZE_MALLOCED_BUFFER (shell_input_line, i, 2, shell_input_line_size, 256);
+
+         if (c == EOF)
+           {
+             if (bash_input.type == st_stream)
+               clearerr (stdin);
+
+             if (i == 0)
+               shell_input_line_terminator = EOF;
+
+             shell_input_line[i] = '\0';
+             break;
+           }
+
+         if (truncating == 0 || c == '\n')
+           shell_input_line[i++] = c;
+
+         if (c == '\n')
+           {
+             shell_input_line[--i] = '\0';
+             current_command_line_count++;
+             break;
+           }
+       }
+
+      shell_input_line_index = 0;
+      shell_input_line_len = i;                /* == strlen (shell_input_line) */
+
+      set_line_mbstate ();
+
+#if defined (HISTORY)
+      if (remember_on_history && shell_input_line && shell_input_line[0])
+       {
+         char *expansions;
+#  if defined (BANG_HISTORY)
+         int old_hist;
+
+         /* If the current delimiter is a single quote, we should not be
+            performing history expansion, even if we're on a different
+            line from the original single quote. */
+         old_hist = history_expansion_inhibited;
+         if (current_delimiter (dstack) == '\'')
+           history_expansion_inhibited = 1;
+#  endif
+         expansions = pre_process_line (shell_input_line, 1, 1);
+#  if defined (BANG_HISTORY)
+         history_expansion_inhibited = old_hist;
+#  endif
+         if (expansions != shell_input_line)
+           {
+             free (shell_input_line);
+             shell_input_line = expansions;
+             shell_input_line_len = shell_input_line ?
+                                       strlen (shell_input_line) : 0;
+             if (shell_input_line_len == 0)
+               current_command_line_count--;
+
+             /* We have to force the xrealloc below because we don't know
+                the true allocated size of shell_input_line anymore. */
+             shell_input_line_size = shell_input_line_len;
+
+             set_line_mbstate ();
+           }
+       }
+      /* Try to do something intelligent with blank lines encountered while
+        entering multi-line commands.  XXX - this is grotesque */
+      else if (remember_on_history && shell_input_line &&
+              shell_input_line[0] == '\0' &&
+              current_command_line_count > 1)
+       {
+         if (current_delimiter (dstack))
+           /* We know shell_input_line[0] == 0 and we're reading some sort of
+              quoted string.  This means we've got a line consisting of only
+              a newline in a quoted string.  We want to make sure this line
+              gets added to the history. */
+           maybe_add_history (shell_input_line);
+         else
+           {
+             char *hdcs;
+             hdcs = history_delimiting_chars (shell_input_line);
+             if (hdcs && hdcs[0] == ';')
+               maybe_add_history (shell_input_line);
+           }
+       }
+
+#endif /* HISTORY */
+
+      if (shell_input_line)
+       {
+         /* Lines that signify the end of the shell's input should not be
+            echoed.  We should not echo lines while parsing command
+            substitutions with recursive calls into the parsing engine; those
+            should only be echoed once when we read the word.  That is the
+            reason for the test against shell_eof_token, which is set to a
+            right paren when parsing the contents of command substitutions. */
+         if (echo_input_at_read && (shell_input_line[0] ||
+                                      shell_input_line_terminator != EOF) &&
+                                    shell_eof_token == 0)
+           fprintf (stderr, "%s\n", shell_input_line);
+       }
+      else
+       {
+         shell_input_line_size = 0;
+         prompt_string_pointer = &current_prompt_string;
+         if (SHOULD_PROMPT ())
+           prompt_again ();
+         goto restart_read;
+       }
+
+      /* Add the newline to the end of this string, iff the string does
+        not already end in an EOF character.  */
+      if (shell_input_line_terminator != EOF)
+       {
+         if (shell_input_line_size < SIZE_MAX && shell_input_line_len > shell_input_line_size - 3)
+           shell_input_line = (char *)xrealloc (shell_input_line,
+                                       1 + (shell_input_line_size += 2));
+
+         shell_input_line[shell_input_line_len] = '\n';
+         shell_input_line[shell_input_line_len + 1] = '\0';
+
+         set_line_mbstate ();
+       }
+    }
+
+next_alias_char:
+  uc = shell_input_line[shell_input_line_index];
+
+  if (uc)
+    shell_input_line_index++;
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  /* If UC is NULL, we have reached the end of the current input string.  If
+     pushed_string_list is non-empty, it's time to pop to the previous string
+     because we have fully consumed the result of the last alias expansion.
+     Do it transparently; just return the next character of the string popped
+     to. */
+  /* If pushed_string_list != 0 but pushed_string_list->expander == 0 (not
+     currently tested) and the flags value is not PSH_SOURCE, we are not
+     parsing an alias, we have just saved one (push_string, when called by
+     the parse_dparen code) In this case, just go on as well.  The PSH_SOURCE
+     case is handled below. */
+pop_alias:
+  if (uc == 0 && pushed_string_list && pushed_string_list->flags != PSH_SOURCE)
+    {
+      pop_string ();
+      uc = shell_input_line[shell_input_line_index];
+      if (uc)
+       shell_input_line_index++;
+    }
+#endif /* ALIAS || DPAREN_ARITHMETIC */
+
+  if MBTEST(uc == '\\' && remove_quoted_newline && shell_input_line[shell_input_line_index] == '\n')
+    {
+       if (SHOULD_PROMPT ())
+         prompt_again ();
+       line_number++;
+       /* What do we do here if we're expanding an alias whose definition
+          includes an escaped newline?  If that's the last character in the
+          alias expansion, we just pop the pushed string list (recall that
+          we inhibit the appending of a space in mk_alexpansion() if newline
+          is the last character).  If it's not the last character, we need
+          to consume the quoted newline and move to the next character in
+          the expansion. */
+#if defined (ALIAS)
+       if (expanding_alias () && shell_input_line[shell_input_line_index+1] == '\0')
+         {
+           uc = 0;
+           goto pop_alias;
+         }
+       else if (expanding_alias () && shell_input_line[shell_input_line_index+1] != '\0')
+         {
+           shell_input_line_index++;   /* skip newline */
+           goto next_alias_char;       /* and get next character */
+         }
+       else
+#endif 
+         goto restart_read;
+    }
+
+  if (uc == 0 && shell_input_line_terminator == EOF)
+    return ((shell_input_line_index != 0) ? '\n' : EOF);
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  /* We already know that we are not parsing an alias expansion because of the
+     check for expanding_alias() above.  This knows how parse_and_execute
+     handles switching to st_string input while an alias is being expanded,
+     hence the check for pushed_string_list without pushed_string_list->expander
+     and the check for PSH_SOURCE as pushed_string_list->flags.
+     parse_and_execute and parse_string both change the input type to st_string
+     and place the string to be parsed and executed into location.string, so
+     we should not stop reading that until the pointer is '\0'.
+     The check for shell_input_line_terminator may be superfluous.
+
+     This solves the problem of `.' inside a multi-line alias with embedded
+     newlines executing things out of order. */
+  if (uc == 0 && bash_input.type == st_string && *bash_input.location.string &&
+      pushed_string_list && pushed_string_list->flags == PSH_SOURCE &&
+      shell_input_line_terminator == 0)
+    {
+      shell_input_line_index = 0;
+      goto restart_read;
+    }
+#endif
+
+  return (uc);
+}
+
+/* Put C back into the input for the shell.  This might need changes for
+   HANDLE_MULTIBYTE around EOLs.  Since we (currently) never push back a
+   character different than we read, shell_input_line_property doesn't need
+   to change when manipulating shell_input_line.  The define for
+   last_shell_getc_is_singlebyte should take care of it, though. */
+static void
+shell_ungetc (c)
+     int c;
+{
+  if (shell_input_line && shell_input_line_index)
+    shell_input_line[--shell_input_line_index] = c;
+  else
+    eol_ungetc_lookahead = c;
+}
+
+#ifdef INCLUDE_UNUSED
+/* Back the input pointer up by one, effectively `ungetting' a character. */
+static void
+shell_ungetchar ()
+{
+  if (shell_input_line && shell_input_line_index)
+    shell_input_line_index--;
+}
+#endif
+
+/* Discard input until CHARACTER is seen, then push that character back
+   onto the input stream. */
+static void
+discard_until (character)
+     int character;
+{
+  int c;
+
+  while ((c = shell_getc (0)) != EOF && c != character)
+    ;
+
+  if (c != EOF)
+    shell_ungetc (c);
+}
+
+void
+execute_variable_command (command, vname)
+     char *command, *vname;
+{
+  char *last_lastarg;
+  sh_parser_state_t ps;
+
+  save_parser_state (&ps);
+  last_lastarg = get_string_value ("_");
+  if (last_lastarg)
+    last_lastarg = savestring (last_lastarg);
+
+  parse_and_execute (savestring (command), vname, SEVAL_NONINT|SEVAL_NOHIST);
+
+  restore_parser_state (&ps);
+  bind_variable ("_", last_lastarg, 0);
+  FREE (last_lastarg);
+
+  if (token_to_read == '\n')   /* reset_parser was called */
+    token_to_read = 0;
+}
+
+/* Place to remember the token.  We try to keep the buffer
+   at a reasonable size, but it can grow. */
+static char *token = (char *)NULL;
+
+/* Current size of the token buffer. */
+static int token_buffer_size;
+
+/* Command to read_token () explaining what we want it to do. */
+#define READ 0
+#define RESET 1
+#define prompt_is_ps1 \
+      (!prompt_string_pointer || prompt_string_pointer == &ps1_prompt)
+
+/* Function for yyparse to call.  yylex keeps track of
+   the last two tokens read, and calls read_token.  */
+static int
+yylex ()
+{
+  if (interactive && (current_token == 0 || current_token == '\n'))
+    {
+      /* Before we print a prompt, we might have to check mailboxes.
+        We do this only if it is time to do so. Notice that only here
+        is the mail alarm reset; nothing takes place in check_mail ()
+        except the checking of mail.  Please don't change this. */
+      if (prompt_is_ps1 && parse_and_execute_level == 0 && time_to_check_mail ())
+       {
+         check_mail ();
+         reset_mail_timer ();
+       }
+
+      /* Avoid printing a prompt if we're not going to read anything, e.g.
+        after resetting the parser with read_token (RESET). */
+      if (token_to_read == 0 && SHOULD_PROMPT ())
+       prompt_again ();
+    }
+
+  two_tokens_ago = token_before_that;
+  token_before_that = last_read_token;
+  last_read_token = current_token;
+  current_token = read_token (READ);
+
+  if ((parser_state & PST_EOFTOKEN) && current_token == shell_eof_token)
+    {
+      current_token = yacc_EOF;
+      if (bash_input.type == st_string)
+       rewind_input_string ();
+    }
+  parser_state &= ~PST_EOFTOKEN;
+
+  return (current_token);
+}
+
+/* When non-zero, we have read the required tokens
+   which allow ESAC to be the next one read. */
+static int esacs_needed_count;
+
+void
+gather_here_documents ()
+{
+  int r;
+
+  r = 0;
+  while (need_here_doc)
+    {
+      parser_state |= PST_HEREDOC;
+      make_here_document (redir_stack[r++], line_number);
+      parser_state &= ~PST_HEREDOC;
+      need_here_doc--;
+    }
+}
+
+/* When non-zero, an open-brace used to create a group is awaiting a close
+   brace partner. */
+static int open_brace_count;
+
+#define command_token_position(token) \
+  (((token) == ASSIGNMENT_WORD) || (parser_state&PST_REDIRLIST) || \
+   ((token) != SEMI_SEMI && (token) != SEMI_AND && (token) != SEMI_SEMI_AND && reserved_word_acceptable(token)))
+
+#define assignment_acceptable(token) \
+  (command_token_position(token) && ((parser_state & PST_CASEPAT) == 0))
+
+/* Check to see if TOKEN is a reserved word and return the token
+   value if it is. */
+#define CHECK_FOR_RESERVED_WORD(tok) \
+  do { \
+    if (!dollar_present && !quoted && \
+       reserved_word_acceptable (last_read_token)) \
+      { \
+       int i; \
+       for (i = 0; word_token_alist[i].word != (char *)NULL; i++) \
+         if (STREQ (tok, word_token_alist[i].word)) \
+           { \
+             if ((parser_state & PST_CASEPAT) && (word_token_alist[i].token != ESAC)) \
+               break; \
+             if (word_token_alist[i].token == TIME && time_command_acceptable () == 0) \
+               break; \
+             if (word_token_alist[i].token == ESAC) \
+               parser_state &= ~(PST_CASEPAT|PST_CASESTMT); \
+             else if (word_token_alist[i].token == CASE) \
+               parser_state |= PST_CASESTMT; \
+             else if (word_token_alist[i].token == COND_END) \
+               parser_state &= ~(PST_CONDCMD|PST_CONDEXPR); \
+             else if (word_token_alist[i].token == COND_START) \
+               parser_state |= PST_CONDCMD; \
+             else if (word_token_alist[i].token == '{') \
+               open_brace_count++; \
+             else if (word_token_alist[i].token == '}' && open_brace_count) \
+               open_brace_count--; \
+             return (word_token_alist[i].token); \
+           } \
+      } \
+  } while (0)
+
+#if defined (ALIAS)
+
+    /* OK, we have a token.  Let's try to alias expand it, if (and only if)
+       it's eligible.
+
+       It is eligible for expansion if EXPAND_ALIASES is set, and
+       the token is unquoted and the last token read was a command
+       separator (or expand_next_token is set), and we are currently
+       processing an alias (pushed_string_list is non-empty) and this
+       token is not the same as the current or any previously
+       processed alias.
+
+       Special cases that disqualify:
+        In a pattern list in a case statement (parser_state & PST_CASEPAT). */
+
+static char *
+mk_alexpansion (s)
+     char *s;
+{
+  int l;
+  char *r;
+
+  l = strlen (s);
+  r = xmalloc (l + 2);
+  strcpy (r, s);
+  /* If the last character in the alias is a newline, don't add a trailing
+     space to the expansion.  Works with shell_getc above. */
+  if (r[l - 1] != ' ' && r[l - 1] != '\n')
+    r[l++] = ' ';
+  r[l] = '\0';
+  return r;
+}
+
+static int
+alias_expand_token (tokstr)
+     char *tokstr;
+{
+  char *expanded;
+  alias_t *ap;
+
+  if (((parser_state & PST_ALEXPNEXT) || command_token_position (last_read_token)) &&
+       (parser_state & PST_CASEPAT) == 0)
+    {
+      ap = find_alias (tokstr);
+
+      /* Currently expanding this token. */
+      if (ap && (ap->flags & AL_BEINGEXPANDED))
+       return (NO_EXPANSION);
+
+      /* mk_alexpansion puts an extra space on the end of the alias expansion,
+         so the lookahead by the parser works right.  If this gets changed,
+         make sure the code in shell_getc that deals with reaching the end of
+         an expanded alias is changed with it. */
+      expanded = ap ? mk_alexpansion (ap->value) : (char *)NULL;
+
+      if (expanded)
+       {
+         push_string (expanded, ap->flags & AL_EXPANDNEXT, ap);
+         return (RE_READ_TOKEN);
+       }
+      else
+       /* This is an eligible token that does not have an expansion. */
+       return (NO_EXPANSION);
+    }
+  return (NO_EXPANSION);
+}
+#endif /* ALIAS */
+
+static int
+time_command_acceptable ()
+{
+#if defined (COMMAND_TIMING)
+  int i;
+
+  if (posixly_correct && shell_compatibility_level > 41)
+    {
+      /* Quick check of the rest of the line to find the next token.  If it
+        begins with a `-', Posix says to not return `time' as the token.
+        This was interp 267. */
+      i = shell_input_line_index;
+      while (i < shell_input_line_len && (shell_input_line[i] == ' ' || shell_input_line[i] == '\t'))
+        i++;
+      if (shell_input_line[i] == '-')
+       return 0;
+    }
+
+  switch (last_read_token)
+    {
+    case 0:
+    case ';':
+    case '\n':
+    case AND_AND:
+    case OR_OR:
+    case '&':
+    case DO:
+    case THEN:
+    case ELSE:
+    case '{':          /* } */
+    case '(':          /* ) */
+    case BANG:         /* ! time pipeline */
+    case TIME:         /* time time pipeline */
+    case TIMEOPT:      /* time -p time pipeline */
+    case TIMEIGN:      /* time -p -- ... */
+      return 1;
+    default:
+      return 0;
+    }
+#else
+  return 0;
+#endif /* COMMAND_TIMING */
+}
+
+/* Handle special cases of token recognition:
+       IN is recognized if the last token was WORD and the token
+       before that was FOR or CASE or SELECT.
+
+       DO is recognized if the last token was WORD and the token
+       before that was FOR or SELECT.
+
+       ESAC is recognized if the last token caused `esacs_needed_count'
+       to be set
+
+       `{' is recognized if the last token as WORD and the token
+       before that was FUNCTION, or if we just parsed an arithmetic
+       `for' command.
+
+       `}' is recognized if there is an unclosed `{' present.
+
+       `-p' is returned as TIMEOPT if the last read token was TIME.
+       `--' is returned as TIMEIGN if the last read token was TIMEOPT.
+
+       ']]' is returned as COND_END if the parser is currently parsing
+       a conditional expression ((parser_state & PST_CONDEXPR) != 0)
+
+       `time' is returned as TIME if and only if it is immediately
+       preceded by one of `;', `\n', `||', `&&', or `&'.
+*/
+
+static int
+special_case_tokens (tokstr)
+     char *tokstr;
+{
+  if ((last_read_token == WORD) &&
+#if defined (SELECT_COMMAND)
+      ((token_before_that == FOR) || (token_before_that == CASE) || (token_before_that == SELECT)) &&
+#else
+      ((token_before_that == FOR) || (token_before_that == CASE)) &&
+#endif
+      (tokstr[0] == 'i' && tokstr[1] == 'n' && tokstr[2] == 0))
+    {
+      if (token_before_that == CASE)
+       {
+         parser_state |= PST_CASEPAT;
+         esacs_needed_count++;
+       }
+      return (IN);
+    }
+
+  if (last_read_token == WORD &&
+#if defined (SELECT_COMMAND)
+      (token_before_that == FOR || token_before_that == SELECT) &&
+#else
+      (token_before_that == FOR) &&
+#endif
+      (tokstr[0] == 'd' && tokstr[1] == 'o' && tokstr[2] == '\0'))
+    return (DO);
+
+  /* Ditto for ESAC in the CASE case.
+     Specifically, this handles "case word in esac", which is a legal
+     construct, certainly because someone will pass an empty arg to the
+     case construct, and we don't want it to barf.  Of course, we should
+     insist that the case construct has at least one pattern in it, but
+     the designers disagree. */
+  if (esacs_needed_count)
+    {
+      esacs_needed_count--;
+      if (STREQ (tokstr, "esac"))
+       {
+         parser_state &= ~PST_CASEPAT;
+         return (ESAC);
+       }
+    }
+
+  /* The start of a shell function definition. */
+  if (parser_state & PST_ALLOWOPNBRC)
+    {
+      parser_state &= ~PST_ALLOWOPNBRC;
+      if (tokstr[0] == '{' && tokstr[1] == '\0')               /* } */
+       {
+         open_brace_count++;
+         function_bstart = line_number;
+         return ('{');                                 /* } */
+       }
+    }
+
+  /* We allow a `do' after a for ((...)) without an intervening
+     list_terminator */
+  if (last_read_token == ARITH_FOR_EXPRS && tokstr[0] == 'd' && tokstr[1] == 'o' && !tokstr[2])
+    return (DO);
+  if (last_read_token == ARITH_FOR_EXPRS && tokstr[0] == '{' && tokstr[1] == '\0')     /* } */
+    {
+      open_brace_count++;
+      return ('{');                    /* } */
+    }
+
+  if (open_brace_count && reserved_word_acceptable (last_read_token) && tokstr[0] == '}' && !tokstr[1])
+    {
+      open_brace_count--;              /* { */
+      return ('}');
+    }
+
+#if defined (COMMAND_TIMING)
+  /* Handle -p after `time'. */
+  if (last_read_token == TIME && tokstr[0] == '-' && tokstr[1] == 'p' && !tokstr[2])
+    return (TIMEOPT);
+  /* Handle -- after `time -p'. */
+  if (last_read_token == TIMEOPT && tokstr[0] == '-' && tokstr[1] == '-' && !tokstr[2])
+    return (TIMEIGN);
+#endif
+
+#if defined (COND_COMMAND) /* [[ */
+  if ((parser_state & PST_CONDEXPR) && tokstr[0] == ']' && tokstr[1] == ']' && tokstr[2] == '\0')
+    return (COND_END);
+#endif
+
+  return (-1);
+}
+
+/* Called from shell.c when Control-C is typed at top level.  Or
+   by the error rule at top level. */
+void
+reset_parser ()
+{
+  dstack.delimiter_depth = 0;  /* No delimiters found so far. */
+  open_brace_count = 0;
+
+#if defined (EXTENDED_GLOB)
+  /* Reset to global value of extended glob */
+  if (parser_state & PST_EXTPAT)
+    extended_glob = global_extglob;
+#endif
+
+  parser_state = 0;
+
+#if defined (ALIAS) || defined (DPAREN_ARITHMETIC)
+  if (pushed_string_list)
+    free_string_list ();
+#endif /* ALIAS || DPAREN_ARITHMETIC */
+
+  if (shell_input_line)
+    {
+      free (shell_input_line);
+      shell_input_line = (char *)NULL;
+      shell_input_line_size = shell_input_line_index = 0;
+    }
+
+  FREE (word_desc_to_read);
+  word_desc_to_read = (WORD_DESC *)NULL;
+
+  current_token = '\n';                /* XXX */
+  last_read_token = '\n';
+  token_to_read = '\n';
+}
+
+/* Read the next token.  Command can be READ (normal operation) or
+   RESET (to normalize state). */
+static int
+read_token (command)
+     int command;
+{
+  int character;               /* Current character. */
+  int peek_char;               /* Temporary look-ahead character. */
+  int result;                  /* The thing to return. */
+
+  if (command == RESET)
+    {
+      reset_parser ();
+      return ('\n');
+    }
+
+  if (token_to_read)
+    {
+      result = token_to_read;
+      if (token_to_read == WORD || token_to_read == ASSIGNMENT_WORD)
+       {
+         yylval.word = word_desc_to_read;
+         word_desc_to_read = (WORD_DESC *)NULL;
+       }
+      token_to_read = 0;
+      return (result);
+    }
+
+#if defined (COND_COMMAND)
+  if ((parser_state & (PST_CONDCMD|PST_CONDEXPR)) == PST_CONDCMD)
+    {
+      cond_lineno = line_number;
+      parser_state |= PST_CONDEXPR;
+      yylval.command = parse_cond_command ();
+      if (cond_token != COND_END)
+       {
+         cond_error ();
+         return (-1);
+       }
+      token_to_read = COND_END;
+      parser_state &= ~(PST_CONDEXPR|PST_CONDCMD);
+      return (COND_CMD);
+    }
+#endif
+
+#if defined (ALIAS)
+  /* This is a place to jump back to once we have successfully expanded a
+     token with an alias and pushed the string with push_string () */
+ re_read_token:
+#endif /* ALIAS */
+
+  /* Read a single word from input.  Start by skipping blanks. */
+  while ((character = shell_getc (1)) != EOF && shellblank (character))
+    ;
+
+  if (character == EOF)
+    {
+      EOF_Reached = 1;
+      return (yacc_EOF);
+    }
+
+  if MBTEST(character == '#' && (!interactive || interactive_comments))
+    {
+      /* A comment.  Discard until EOL or EOF, and then return a newline. */
+      discard_until ('\n');
+      shell_getc (0);
+      character = '\n';        /* this will take the next if statement and return. */
+    }
+
+  if (character == '\n')
+    {
+      /* If we're about to return an unquoted newline, we can go and collect
+        the text of any pending here document. */
+      if (need_here_doc)
+       gather_here_documents ();
+
+#if defined (ALIAS)
+      parser_state &= ~PST_ALEXPNEXT;
+#endif /* ALIAS */
+
+      parser_state &= ~PST_ASSIGNOK;
+
+      return (character);
+    }
+
+  if (parser_state & PST_REGEXP)
+    goto tokword;
+
+  /* Shell meta-characters. */
+  if MBTEST(shellmeta (character) && ((parser_state & PST_DBLPAREN) == 0))
+    {
+#if defined (ALIAS)
+      /* Turn off alias tokenization iff this character sequence would
+        not leave us ready to read a command. */
+      if (character == '<' || character == '>')
+       parser_state &= ~PST_ALEXPNEXT;
+#endif /* ALIAS */
+
+      parser_state &= ~PST_ASSIGNOK;
+
+      peek_char = shell_getc (1);
+      if (character == peek_char)
+       {
+         switch (character)
+           {
+           case '<':
+             /* If '<' then we could be at "<<" or at "<<-".  We have to
+                look ahead one more character. */
+             peek_char = shell_getc (1);
+             if MBTEST(peek_char == '-')
+               return (LESS_LESS_MINUS);
+             else if MBTEST(peek_char == '<')
+               return (LESS_LESS_LESS);
+             else
+               {
+                 shell_ungetc (peek_char);
+                 return (LESS_LESS);
+               }
+
+           case '>':
+             return (GREATER_GREATER);
+
+           case ';':
+             parser_state |= PST_CASEPAT;
+#if defined (ALIAS)
+             parser_state &= ~PST_ALEXPNEXT;
+#endif /* ALIAS */
+
+             peek_char = shell_getc (1);
+             if MBTEST(peek_char == '&')
+               return (SEMI_SEMI_AND);
+             else
+               {
+                 shell_ungetc (peek_char);
+                 return (SEMI_SEMI);
+               }
+
+           case '&':
+             return (AND_AND);
+
+           case '|':
+             return (OR_OR);
+
+#if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
+           case '(':           /* ) */
+             result = parse_dparen (character);
+             if (result == -2)
+               break;
+             else
+               return result;
+#endif
+           }
+       }
+      else if MBTEST(character == '<' && peek_char == '&')
+       return (LESS_AND);
+      else if MBTEST(character == '>' && peek_char == '&')
+       return (GREATER_AND);
+      else if MBTEST(character == '<' && peek_char == '>')
+       return (LESS_GREATER);
+      else if MBTEST(character == '>' && peek_char == '|')
+       return (GREATER_BAR);
+      else if MBTEST(character == '&' && peek_char == '>')
+       {
+         peek_char = shell_getc (1);
+         if MBTEST(peek_char == '>')
+           return (AND_GREATER_GREATER);
+         else
+           {
+             shell_ungetc (peek_char);
+             return (AND_GREATER);
+           }
+       }
+      else if MBTEST(character == '|' && peek_char == '&')
+       return (BAR_AND);
+      else if MBTEST(character == ';' && peek_char == '&')
+       {
+         parser_state |= PST_CASEPAT;
+#if defined (ALIAS)
+         parser_state &= ~PST_ALEXPNEXT;
+#endif /* ALIAS */
+         return (SEMI_AND);
+       }
+
+      shell_ungetc (peek_char);
+
+      /* If we look like we are reading the start of a function
+        definition, then let the reader know about it so that
+        we will do the right thing with `{'. */
+      if MBTEST(character == ')' && last_read_token == '(' && token_before_that == WORD)
+       {
+         parser_state |= PST_ALLOWOPNBRC;
+#if defined (ALIAS)
+         parser_state &= ~PST_ALEXPNEXT;
+#endif /* ALIAS */
+         function_dstart = line_number;
+       }
+
+      /* case pattern lists may be preceded by an optional left paren.  If
+        we're not trying to parse a case pattern list, the left paren
+        indicates a subshell. */
+      if MBTEST(character == '(' && (parser_state & PST_CASEPAT) == 0) /* ) */
+       parser_state |= PST_SUBSHELL;
+      /*(*/
+      else if MBTEST((parser_state & PST_CASEPAT) && character == ')')
+       parser_state &= ~PST_CASEPAT;
+      /*(*/
+      else if MBTEST((parser_state & PST_SUBSHELL) && character == ')')
+       parser_state &= ~PST_SUBSHELL;
+
+#if defined (PROCESS_SUBSTITUTION)
+      /* Check for the constructs which introduce process substitution.
+        Shells running in `posix mode' don't do process substitution. */
+      if MBTEST(posixly_correct || ((character != '>' && character != '<') || peek_char != '(')) /*)*/
+#endif /* PROCESS_SUBSTITUTION */
+       return (character);
+    }
+
+  /* Hack <&- (close stdin) case.  Also <&N- (dup and close). */
+  if MBTEST(character == '-' && (last_read_token == LESS_AND || last_read_token == GREATER_AND))
+    return (character);
+
+tokword:
+  /* Okay, if we got this far, we have to read a word.  Read one,
+     and then check it against the known ones. */
+  result = read_token_word (character);
+#if defined (ALIAS)
+  if (result == RE_READ_TOKEN)
+    goto re_read_token;
+#endif
+  return result;
+}
+
+/*
+ * Match a $(...) or other grouping construct.  This has to handle embedded
+ * quoted strings ('', ``, "") and nested constructs.  It also must handle
+ * reprompting the user, if necessary, after reading a newline, and returning
+ * correct error values if it reads EOF.
+ */
+#define P_FIRSTCLOSE   0x0001
+#define P_ALLOWESC     0x0002
+#define P_DQUOTE       0x0004
+#define P_COMMAND      0x0008  /* parsing a command, so look for comments */
+#define P_BACKQUOTE    0x0010  /* parsing a backquoted command substitution */
+#define P_ARRAYSUB     0x0020  /* parsing a [...] array subscript for assignment */
+#define P_DOLBRACE     0x0040  /* parsing a ${...} construct */
+
+/* Lexical state while parsing a grouping construct or $(...). */
+#define LEX_WASDOL     0x001
+#define LEX_CKCOMMENT  0x002
+#define LEX_INCOMMENT  0x004
+#define LEX_PASSNEXT   0x008
+#define LEX_RESWDOK    0x010
+#define LEX_CKCASE     0x020
+#define LEX_INCASE     0x040
+#define LEX_INHEREDOC  0x080
+#define LEX_HEREDELIM  0x100           /* reading here-doc delimiter */
+#define LEX_STRIPDOC   0x200           /* <<- strip tabs from here doc delim */
+#define LEX_INWORD     0x400
+
+#define COMSUB_META(ch)                ((ch) == ';' || (ch) == '&' || (ch) == '|')
+
+#define CHECK_NESTRET_ERROR() \
+  do { \
+    if (nestret == &matched_pair_error) \
+      { \
+       free (ret); \
+       return &matched_pair_error; \
+      } \
+  } while (0)
+
+#define APPEND_NESTRET() \
+  do { \
+    if (nestlen) \
+      { \
+       RESIZE_MALLOCED_BUFFER (ret, retind, nestlen, retsize, 64); \
+       strcpy (ret + retind, nestret); \
+       retind += nestlen; \
+      } \
+  } while (0)
+
+static char matched_pair_error;
+
+static char *
+parse_matched_pair (qc, open, close, lenp, flags)
+     int qc;   /* `"' if this construct is within double quotes */
+     int open, close;
+     int *lenp, flags;
+{
+  int count, ch, tflags;
+  int nestlen, ttranslen, start_lineno;
+  char *ret, *nestret, *ttrans;
+  int retind, retsize, rflags;
+  int dolbrace_state;
+
+  dolbrace_state = (flags & P_DOLBRACE) ? DOLBRACE_PARAM : 0;
+
+/*itrace("parse_matched_pair[%d]: open = %c close = %c flags = %d", line_number, open, close, flags);*/
+  count = 1;
+  tflags = 0;
+
+  if ((flags & P_COMMAND) && qc != '`' && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0)
+    tflags |= LEX_CKCOMMENT;
+
+  /* RFLAGS is the set of flags we want to pass to recursive calls. */
+  rflags = (qc == '"') ? P_DQUOTE : (flags & P_DQUOTE);
+
+  ret = (char *)xmalloc (retsize = 64);
+  retind = 0;
+
+  start_lineno = line_number;
+  while (count)
+    {
+      ch = shell_getc (qc != '\'' && (tflags & (LEX_PASSNEXT)) == 0);
+
+      if (ch == EOF)
+       {
+         free (ret);
+         parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
+         EOF_Reached = 1;      /* XXX */
+         return (&matched_pair_error);
+       }
+
+      /* Possible reprompting. */
+      if (ch == '\n' && SHOULD_PROMPT ())
+       prompt_again ();
+
+      /* Don't bother counting parens or doing anything else if in a comment
+        or part of a case statement */
+      if (tflags & LEX_INCOMMENT)
+       {
+         /* Add this character. */
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+
+         if (ch == '\n')
+           tflags &= ~LEX_INCOMMENT;
+
+         continue;
+       }
+
+      /* Not exactly right yet, should handle shell metacharacters, too.  If
+        any changes are made to this test, make analogous changes to subst.c:
+        extract_delimited_string(). */
+      else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (retind == 0 || ret[retind-1] == '\n' || shellblank (ret[retind - 1])))
+       tflags |= LEX_INCOMMENT;
+
+      if (tflags & LEX_PASSNEXT)               /* last char was backslash */
+       {
+         tflags &= ~LEX_PASSNEXT;
+         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
+           {
+             if (retind > 0)
+               retind--;       /* swallow previously-added backslash */
+             continue;
+           }
+
+         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
+         if MBTEST(ch == CTLESC)
+           ret[retind++] = CTLESC;
+         ret[retind++] = ch;
+         continue;
+       }
+      /* If we're reparsing the input (e.g., from parse_string_to_word_list),
+        we've already prepended CTLESC to single-quoted results of $'...'.
+        We may want to do this for other CTLESC-quoted characters in
+        reparse, too. */
+      else if MBTEST((parser_state & PST_REPARSE) && open == '\'' && (ch == CTLESC || ch == CTLNUL))
+       {
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+         continue;
+       }
+      else if MBTEST(ch == CTLESC || ch == CTLNUL)     /* special shell escapes */
+       {
+         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
+         ret[retind++] = CTLESC;
+         ret[retind++] = ch;
+         continue;
+       }
+      else if MBTEST(ch == close)              /* ending delimiter */
+       count--;
+      /* handle nested ${...} specially. */
+      else if MBTEST(open != close && (tflags & LEX_WASDOL) && open == '{' && ch == open) /* } */
+       count++;
+      else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && ch == open)      /* nested begin */
+       count++;
+
+      /* Add this character. */
+      RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+      ret[retind++] = ch;
+
+      /* If we just read the ending character, don't bother continuing. */
+      if (count == 0)
+       break;
+
+      if (open == '\'')                        /* '' inside grouping construct */
+       {
+         if MBTEST((flags & P_ALLOWESC) && ch == '\\')
+           tflags |= LEX_PASSNEXT;
+         continue;
+       }
+
+      if MBTEST(ch == '\\')                    /* backslashes */
+       tflags |= LEX_PASSNEXT;
+
+      /* Based on which dolstate is currently in (param, op, or word),
+        decide what the op is.  We're really only concerned if it's % or
+        #, so we can turn on a flag that says whether or not we should
+        treat single quotes as special when inside a double-quoted
+        ${...}. This logic must agree with subst.c:extract_dollar_brace_string
+        since they share the same defines. */
+      /* FLAG POSIX INTERP 221 */
+      if (flags & P_DOLBRACE)
+        {
+          /* ${param%[%]word} */
+         if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '%' && retind > 1)
+           dolbrace_state = DOLBRACE_QUOTE;
+          /* ${param#[#]word} */
+         else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '#' && retind > 1)
+           dolbrace_state = DOLBRACE_QUOTE;
+          /* ${param/[/]pat/rep} */
+         else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '/' && retind > 1)
+{
+itrace("parse_matched_pair: dolbrace_state -> DOLBRACE_QUOTE2");
+           dolbrace_state = DOLBRACE_QUOTE2;   /* XXX */
+}
+          /* ${param^[^]pat} */
+         else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == '^' && retind > 1)
+           dolbrace_state = DOLBRACE_QUOTE;
+          /* ${param,[,]pat} */
+         else if MBTEST(dolbrace_state == DOLBRACE_PARAM && ch == ',' && retind > 1)
+           dolbrace_state = DOLBRACE_QUOTE;
+         else if MBTEST(dolbrace_state == DOLBRACE_PARAM && strchr ("#%^,~:-=?+/", ch) != 0)
+           dolbrace_state = DOLBRACE_OP;
+         else if MBTEST(dolbrace_state == DOLBRACE_OP && strchr ("#%^,~:-=?+/", ch) == 0)
+           dolbrace_state = DOLBRACE_WORD;
+        }
+
+      /* The big hammer.  Single quotes aren't special in double quotes.  The
+         problem is that Posix used to say the single quotes are semi-special:
+         within a double-quoted ${...} construct "an even number of
+         unescaped double-quotes or single-quotes, if any, shall occur." */
+      /* This was changed in Austin Group Interp 221 */
+      if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'')
+       continue;
+
+      /* Could also check open == '`' if we want to parse grouping constructs
+        inside old-style command substitution. */
+      if (open != close)               /* a grouping construct */
+       {
+         if MBTEST(shellquote (ch))
+           {
+             /* '', ``, or "" inside $(...) or other grouping construct. */
+             push_delimiter (dstack, ch);
+             if MBTEST((tflags & LEX_WASDOL) && ch == '\'')    /* $'...' inside group */
+               nestret = parse_matched_pair (ch, ch, ch, &nestlen, P_ALLOWESC|rflags);
+             else
+               nestret = parse_matched_pair (ch, ch, ch, &nestlen, rflags);
+             pop_delimiter (dstack);
+             CHECK_NESTRET_ERROR ();
+
+             if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
+               {
+                 /* Translate $'...' here. */
+                 ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
+                 xfree (nestret);
+
+                 /* If we're parsing a double-quoted brace expansion and we are
+                    not in a place where single quotes are treated specially,
+                    make sure we single-quote the results of the ansi
+                    expansion because quote removal should remove them later */
+                 /* FLAG POSIX INTERP 221 */
+                 if ((shell_compatibility_level > 42) && (rflags & P_DQUOTE) && (dolbrace_state == DOLBRACE_QUOTE2) && (flags & P_DOLBRACE))
+                   {
+itrace("parse_matched_pair: calling sh_single_quote on %s", ttrans);
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+                 else if ((rflags & P_DQUOTE) == 0)
+                   {
+                     nestret = sh_single_quote (ttrans);
+                     free (ttrans);
+                     nestlen = strlen (nestret);
+                   }
+                 else
+                   {
+                     nestret = ttrans;
+                     nestlen = ttranslen;
+                   }
+                 retind -= 2;          /* back up before the $' */
+               }
+             else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
+               {
+                 /* Locale expand $"..." here. */
+                 ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
+                 xfree (nestret);
+
+                 nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
+                 free (ttrans);
+                 nestlen = ttranslen + 2;
+                 retind -= 2;          /* back up before the $" */
+               }
+
+             APPEND_NESTRET ();
+             FREE (nestret);
+           }
+         else if ((flags & P_ARRAYSUB) && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))      /* ) } ] */
+           goto parse_dollar_word;
+       }
+      /* Parse an old-style command substitution within double quotes as a
+        single word. */
+      /* XXX - sh and ksh93 don't do this - XXX */
+      else if MBTEST(open == '"' && ch == '`')
+       {
+         nestret = parse_matched_pair (0, '`', '`', &nestlen, rflags);
+
+         CHECK_NESTRET_ERROR ();
+         APPEND_NESTRET ();
+
+         FREE (nestret);
+       }
+      else if MBTEST(open != '`' && (tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))    /* ) } ] */
+       /* check for $(), $[], or ${} inside quoted string. */
+       {
+parse_dollar_word:
+         if (open == ch)       /* undo previous increment */
+           count--;
+         if (ch == '(')                /* ) */
+           nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
+         else if (ch == '{')           /* } */
+           nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
+         else if (ch == '[')           /* ] */
+           nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
+
+         CHECK_NESTRET_ERROR ();
+         APPEND_NESTRET ();
+
+         FREE (nestret);
+       }
+      if MBTEST(ch == '$')
+       tflags |= LEX_WASDOL;
+      else
+       tflags &= ~LEX_WASDOL;
+    }
+
+  ret[retind] = '\0';
+  if (lenp)
+    *lenp = retind;
+/*itrace("parse_matched_pair[%d]: returning %s", line_number, ret);*/
+  return ret;
+}
+
+/* Parse a $(...) command substitution.  This is messier than I'd like, and
+   reproduces a lot more of the token-reading code than I'd like. */
+static char *
+parse_comsub (qc, open, close, lenp, flags)
+     int qc;   /* `"' if this construct is within double quotes */
+     int open, close;
+     int *lenp, flags;
+{
+  int count, ch, peekc, tflags, lex_rwlen, lex_wlen, lex_firstind;
+  int nestlen, ttranslen, start_lineno;
+  char *ret, *nestret, *ttrans, *heredelim;
+  int retind, retsize, rflags, hdlen;
+
+  /* Posix interp 217 says arithmetic expressions have precedence, so
+     assume $(( introduces arithmetic expansion and parse accordingly. */
+  peekc = shell_getc (0);
+  shell_ungetc (peekc);
+  if (peekc == '(')
+    return (parse_matched_pair (qc, open, close, lenp, 0));
+
+/*itrace("parse_comsub: qc = `%c' open = %c close = %c", qc, open, close);*/
+  count = 1;
+  tflags = LEX_RESWDOK;
+
+  if ((flags & P_COMMAND) && qc != '\'' && qc != '"' && (flags & P_DQUOTE) == 0)
+    tflags |= LEX_CKCASE;
+  if ((tflags & LEX_CKCASE) && (interactive == 0 || interactive_comments))
+    tflags |= LEX_CKCOMMENT;
+
+  /* RFLAGS is the set of flags we want to pass to recursive calls. */
+  rflags = (flags & P_DQUOTE);
+
+  ret = (char *)xmalloc (retsize = 64);
+  retind = 0;
+
+  start_lineno = line_number;
+  lex_rwlen = lex_wlen = 0;
+
+  heredelim = 0;
+  lex_firstind = -1;
+
+  while (count)
+    {
+comsub_readchar:
+      ch = shell_getc (qc != '\'' && (tflags & (LEX_INCOMMENT|LEX_PASSNEXT)) == 0);
+
+      if (ch == EOF)
+       {
+eof_error:
+         free (ret);
+         FREE (heredelim);
+         parser_error (start_lineno, _("unexpected EOF while looking for matching `%c'"), close);
+         EOF_Reached = 1;      /* XXX */
+         return (&matched_pair_error);
+       }
+
+      /* If we hit the end of a line and are reading the contents of a here
+        document, and it's not the same line that the document starts on,
+        check for this line being the here doc delimiter.  Otherwise, if
+        we're in a here document, mark the next character as the beginning
+        of a line. */
+      if (ch == '\n')
+       {
+         if ((tflags & LEX_HEREDELIM) && heredelim)
+           {
+             tflags &= ~LEX_HEREDELIM;
+             tflags |= LEX_INHEREDOC;
+             lex_firstind = retind + 1;
+           }
+         else if (tflags & LEX_INHEREDOC)
+           {
+             int tind;
+             tind = lex_firstind;
+             while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
+               tind++;
+             if (STREQN (ret + tind, heredelim, hdlen))
+               {
+                 tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC);
+/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
+                 free (heredelim);
+                 heredelim = 0;
+                 lex_firstind = -1;
+               }
+             else
+               lex_firstind = retind + 1;
+           }
+       }
+
+      /* Possible reprompting. */
+      if (ch == '\n' && SHOULD_PROMPT ())
+       prompt_again ();
+
+      /* XXX -- possibly allow here doc to be delimited by ending right
+        paren. */
+      if ((tflags & LEX_INHEREDOC) && ch == close && count == 1)
+       {
+         int tind;
+/*itrace("parse_comsub: in here doc, ch == close, retind - firstind = %d hdlen = %d retind = %d", retind-lex_firstind, hdlen, retind);*/
+         tind = lex_firstind;
+         while ((tflags & LEX_STRIPDOC) && ret[tind] == '\t')
+           tind++;
+         if (retind-tind == hdlen && STREQN (ret + tind, heredelim, hdlen))
+           {
+             tflags &= ~(LEX_STRIPDOC|LEX_INHEREDOC);
+/*itrace("parse_comsub:%d: found here doc end `%s'", line_number, ret + tind);*/
+             free (heredelim);
+             heredelim = 0;
+             lex_firstind = -1;
+           }
+       }
+
+      /* Don't bother counting parens or doing anything else if in a comment */
+      if (tflags & (LEX_INCOMMENT|LEX_INHEREDOC))
+       {
+         /* Add this character. */
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+
+         if ((tflags & LEX_INCOMMENT) && ch == '\n')
+           {
+/*itrace("parse_comsub:%d: lex_incomment -> 0 ch = `%c'", line_number, ch);*/
+             tflags &= ~LEX_INCOMMENT;
+           }
+
+         continue;
+       }
+
+      if (tflags & LEX_PASSNEXT)               /* last char was backslash */
+       {
+/*itrace("parse_comsub:%d: lex_passnext -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
+         tflags &= ~LEX_PASSNEXT;
+         if (qc != '\'' && ch == '\n') /* double-quoted \<newline> disappears. */
+           {
+             if (retind > 0)
+               retind--;       /* swallow previously-added backslash */
+             continue;
+           }
+
+         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
+         if MBTEST(ch == CTLESC)
+           ret[retind++] = CTLESC;
+         ret[retind++] = ch;
+         continue;
+       }
+
+      /* If this is a shell break character, we are not in a word.  If not,
+        we either start or continue a word. */
+      if MBTEST(shellbreak (ch))
+       {
+         tflags &= ~LEX_INWORD;
+/*itrace("parse_comsub:%d: lex_inword -> 0 ch = `%c' (%d)", line_number, ch, __LINE__);*/
+       }
+      else
+       {
+         if (tflags & LEX_INWORD)
+           {
+             lex_wlen++;
+/*itrace("parse_comsub:%d: lex_inword == 1 ch = `%c' lex_wlen = %d (%d)", line_number, ch, lex_wlen, __LINE__);*/
+           }         
+         else
+           {
+/*itrace("parse_comsub:%d: lex_inword -> 1 ch = `%c' (%d)", line_number, ch, __LINE__);*/
+             tflags |= LEX_INWORD;
+             lex_wlen = 0;
+           }
+       }
+
+      /* Skip whitespace */
+      if MBTEST(shellblank (ch) && (tflags & LEX_HEREDELIM) == 0 && lex_rwlen == 0)
+        {
+         /* Add this character. */
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+         continue;
+        }
+
+      /* Either we are looking for the start of the here-doc delimiter
+        (lex_firstind == -1) or we are reading one (lex_firstind >= 0).
+        If this character is a shell break character and we are reading
+        the delimiter, save it and note that we are now reading a here
+        document.  If we've found the start of the delimiter, note it by
+        setting lex_firstind.  Backslashes can quote shell metacharacters
+        in here-doc delimiters. */
+      if (tflags & LEX_HEREDELIM)
+       {
+         if (lex_firstind == -1 && shellbreak (ch) == 0)
+           lex_firstind = retind;
+#if 0
+         else if (heredelim && (tflags & LEX_PASSNEXT) == 0 && ch == '\n')
+           {
+             tflags |= LEX_INHEREDOC;
+             tflags &= ~LEX_HEREDELIM;
+             lex_firstind = retind + 1;
+           }
+#endif
+         else if (lex_firstind >= 0 && (tflags & LEX_PASSNEXT) == 0 && shellbreak (ch))
+           {
+             if (heredelim == 0)
+               {
+                 nestret = substring (ret, lex_firstind, retind);
+                 heredelim = string_quote_removal (nestret, 0);
+                 free (nestret);
+                 hdlen = STRLEN(heredelim);
+/*itrace("parse_comsub:%d: found here doc delimiter `%s' (%d)", line_number, heredelim, hdlen);*/
+               }
+             if (ch == '\n')
+               {
+                 tflags |= LEX_INHEREDOC;
+                 tflags &= ~LEX_HEREDELIM;
+                 lex_firstind = retind + 1;
+               }
+             else
+               lex_firstind = -1;
+           }
+       }
+
+      /* Meta-characters that can introduce a reserved word.  Not perfect yet. */
+      if MBTEST((tflags & LEX_RESWDOK) == 0 && (tflags & LEX_CKCASE) && (tflags & LEX_INCOMMENT) == 0 && (shellmeta(ch) || ch == '\n'))
+       {
+         /* Add this character. */
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+         peekc = shell_getc (1);
+         if (ch == peekc && (ch == '&' || ch == '|' || ch == ';'))     /* two-character tokens */
+           {
+             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+             ret[retind++] = peekc;
+/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
+             tflags |= LEX_RESWDOK;
+             lex_rwlen = 0;
+             continue;
+           }
+         else if (ch == '\n' || COMSUB_META(ch))
+           {
+             shell_ungetc (peekc);
+/*itrace("parse_comsub:%d: set lex_reswordok = 1, ch = `%c'", line_number, ch);*/
+             tflags |= LEX_RESWDOK;
+             lex_rwlen = 0;
+             continue;
+           }
+         else if (ch == EOF)
+           goto eof_error;
+         else
+           {
+             /* `unget' the character we just added and fall through */
+             retind--;
+             shell_ungetc (peekc);
+           }
+       }
+
+      /* If we can read a reserved word, try to read one. */
+      if (tflags & LEX_RESWDOK)
+       {
+         if MBTEST(islower (ch))
+           {
+             /* Add this character. */
+             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+             ret[retind++] = ch;
+             lex_rwlen++;
+             continue;
+           }
+         else if MBTEST(lex_rwlen == 4 && shellbreak (ch))
+           {
+             if (STREQN (ret + retind - 4, "case", 4))
+               {
+                 tflags |= LEX_INCASE;
+/*itrace("parse_comsub:%d: found `case', lex_incase -> 1 lex_reswdok -> 0", line_number);*/
+               }
+             else if (STREQN (ret + retind - 4, "esac", 4))
+               {
+                 tflags &= ~LEX_INCASE;
+/*itrace("parse_comsub:%d: found `esac', lex_incase -> 0 lex_reswdok -> 0", line_number);*/
+               }
+             tflags &= ~LEX_RESWDOK;
+           }
+         else if MBTEST((tflags & LEX_CKCOMMENT) && ch == '#' && (lex_rwlen == 0 || ((tflags & LEX_INWORD) && lex_wlen == 0)))
+           ;   /* don't modify LEX_RESWDOK if we're starting a comment */
+         /* Allow `do' followed by space, tab, or newline to preserve the
+            RESWDOK flag, but reset the reserved word length counter so we
+            can read another one. */
+         else if MBTEST(((tflags & LEX_INCASE) == 0) &&
+                         (isblank(ch) || ch == '\n') &&
+                         lex_rwlen == 2 &&
+                         STREQN (ret + retind - 2, "do", 2))
+           {
+/*itrace("parse_comsub:%d: lex_incase == 1 found `%c', found \"do\"", line_number, ch);*/
+             lex_rwlen = 0;
+           }
+         else if MBTEST((tflags & LEX_INCASE) && ch != '\n')
+           /* If we can read a reserved word and we're in case, we're at the
+              point where we can read a new pattern list or an esac.  We
+              handle the esac case above.  If we read a newline, we want to
+              leave LEX_RESWDOK alone.  If we read anything else, we want to
+              turn off LEX_RESWDOK, since we're going to read a pattern list. */
+           {
+             tflags &= ~LEX_RESWDOK;
+/*itrace("parse_comsub:%d: lex_incase == 1 found `%c', lex_reswordok -> 0", line_number, ch);*/
+           }
+         else if MBTEST(shellbreak (ch) == 0)
+           {
+             tflags &= ~LEX_RESWDOK;
+/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
+           }
+#if 0
+         /* If we find a space or tab but have read something and it's not
+            `do', turn off the reserved-word-ok flag */
+         else if MBTEST(isblank (ch) && lex_rwlen > 0)
+           {
+             tflags &= ~LEX_RESWDOK;
+/*itrace("parse_comsub:%d: found `%c', lex_reswordok -> 0", line_number, ch);*/
+           }
+#endif
+       }
+
+      /* Might be the start of a here-doc delimiter */
+      if MBTEST((tflags & LEX_INCOMMENT) == 0 && (tflags & LEX_CKCASE) && ch == '<')
+       {
+         /* Add this character. */
+         RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+         ret[retind++] = ch;
+         peekc = shell_getc (1);
+         if (peekc == EOF)
+           goto eof_error;
+         if (peekc == ch)
+           {
+             RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+             ret[retind++] = peekc;
+             peekc = shell_getc (1);
+             if (peekc == EOF)
+               goto eof_error;
+             if (peekc == '-')
+               {
+                 RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+                 ret[retind++] = peekc;
+                 tflags |= LEX_STRIPDOC;
+               }
+             else
+               shell_ungetc (peekc);
+             if (peekc != '<')
+               {
+                 tflags |= LEX_HEREDELIM;
+                 lex_firstind = -1;
+               }
+             continue;
+           }
+         else
+           ch = peekc;         /* fall through and continue XXX */
+       }
+      else if MBTEST((tflags & LEX_CKCOMMENT) && (tflags & LEX_INCOMMENT) == 0 && ch == '#' && (((tflags & LEX_RESWDOK) && lex_rwlen == 0) || ((tflags & LEX_INWORD) && lex_wlen == 0)))
+       {
+/*itrace("parse_comsub:%d: lex_incomment -> 1 (%d)", line_number, __LINE__);*/
+         tflags |= LEX_INCOMMENT;
+       }
+
+      if MBTEST(ch == CTLESC || ch == CTLNUL)  /* special shell escapes */
+       {
+         RESIZE_MALLOCED_BUFFER (ret, retind, 2, retsize, 64);
+         ret[retind++] = CTLESC;
+         ret[retind++] = ch;
+         continue;
+       }
+#if 0
+      else if MBTEST((tflags & LEX_INCASE) && ch == close && close == ')')
+        tflags &= ~LEX_INCASE;         /* XXX */
+#endif
+      else if MBTEST(ch == close && (tflags & LEX_INCASE) == 0)                /* ending delimiter */
+       {
+         count--;
+/*itrace("parse_comsub:%d: found close: count = %d", line_number, count);*/
+       }
+      else if MBTEST(((flags & P_FIRSTCLOSE) == 0) && (tflags & LEX_INCASE) == 0 && ch == open)        /* nested begin */
+       {
+         count++;
+/*itrace("parse_comsub:%d: found open: count = %d", line_number, count);*/
+       }
+
+      /* Add this character. */
+      RESIZE_MALLOCED_BUFFER (ret, retind, 1, retsize, 64);
+      ret[retind++] = ch;
+
+      /* If we just read the ending character, don't bother continuing. */
+      if (count == 0)
+       break;
+
+      if MBTEST(ch == '\\')                    /* backslashes */
+       tflags |= LEX_PASSNEXT;
+
+      if MBTEST(shellquote (ch))
+        {
+          /* '', ``, or "" inside $(...). */
+          push_delimiter (dstack, ch);
+          if MBTEST((tflags & LEX_WASDOL) && ch == '\'')       /* $'...' inside group */
+           nestret = parse_matched_pair (ch, ch, ch, &nestlen, P_ALLOWESC|rflags);
+         else
+           nestret = parse_matched_pair (ch, ch, ch, &nestlen, rflags);
+         pop_delimiter (dstack);
+         CHECK_NESTRET_ERROR ();
+
+         if MBTEST((tflags & LEX_WASDOL) && ch == '\'' && (extended_quote || (rflags & P_DQUOTE) == 0))
+           {
+             /* Translate $'...' here. */
+             ttrans = ansiexpand (nestret, 0, nestlen - 1, &ttranslen);
+             xfree (nestret);
+
+             if ((rflags & P_DQUOTE) == 0)
+               {
+                 nestret = sh_single_quote (ttrans);
+                 free (ttrans);
+                 nestlen = strlen (nestret);
+               }
+             else
+               {
+                 nestret = ttrans;
+                 nestlen = ttranslen;
+               }
+             retind -= 2;              /* back up before the $' */
+           }
+         else if MBTEST((tflags & LEX_WASDOL) && ch == '"' && (extended_quote || (rflags & P_DQUOTE) == 0))
+           {
+             /* Locale expand $"..." here. */
+             ttrans = localeexpand (nestret, 0, nestlen - 1, start_lineno, &ttranslen);
+             xfree (nestret);
+
+             nestret = sh_mkdoublequoted (ttrans, ttranslen, 0);
+             free (ttrans);
+             nestlen = ttranslen + 2;
+             retind -= 2;              /* back up before the $" */
+           }
+
+         APPEND_NESTRET ();
+         FREE (nestret);
+       }
+      else if MBTEST((tflags & LEX_WASDOL) && (ch == '(' || ch == '{' || ch == '['))   /* ) } ] */
+       /* check for $(), $[], or ${} inside command substitution. */
+       {
+         if ((tflags & LEX_INCASE) == 0 && open == ch) /* undo previous increment */
+           count--;
+         if (ch == '(')                /* ) */
+           nestret = parse_comsub (0, '(', ')', &nestlen, (rflags|P_COMMAND) & ~P_DQUOTE);
+         else if (ch == '{')           /* } */
+           nestret = parse_matched_pair (0, '{', '}', &nestlen, P_FIRSTCLOSE|P_DOLBRACE|rflags);
+         else if (ch == '[')           /* ] */
+           nestret = parse_matched_pair (0, '[', ']', &nestlen, rflags);
+
+         CHECK_NESTRET_ERROR ();
+         APPEND_NESTRET ();
+
+         FREE (nestret);
+       }
+      if MBTEST(ch == '$')
+       tflags |= LEX_WASDOL;
+      else
+       tflags &= ~LEX_WASDOL;
+    }
+
+  FREE (heredelim);
+  ret[retind] = '\0';
+  if (lenp)
+    *lenp = retind;
+/*itrace("parse_comsub:%d: returning `%s'", line_number, ret);*/
+  return ret;
+}
+
+/* Recursively call the parser to parse a $(...) command substitution. */
+char *
+xparse_dolparen (base, string, indp, flags)
+     char *base;
+     char *string;
+     int *indp;
+     int flags;
+{
+  sh_parser_state_t ps;
+  sh_input_line_state_t ls;
+  int orig_ind, nc, sflags, orig_eof_token;
+  char *ret, *s, *ep, *ostring;
+
+  /*yydebug = 1;*/
+  orig_ind = *indp;
+  ostring = string;
+
+/*itrace("xparse_dolparen: size = %d shell_input_line = `%s'", shell_input_line_size, shell_input_line);*/
+  sflags = SEVAL_NONINT|SEVAL_NOHIST|SEVAL_NOFREE;
+  if (flags & SX_NOLONGJMP)
+    sflags |= SEVAL_NOLONGJMP;
+  save_parser_state (&ps);
+  save_input_line_state (&ls);
+  orig_eof_token = shell_eof_token;
+
+  /*(*/
+  parser_state |= PST_CMDSUBST|PST_EOFTOKEN;   /* allow instant ')' */ /*(*/
+  shell_eof_token = ')';
+  parse_string (string, "command substitution", sflags, &ep);
+
+  shell_eof_token = orig_eof_token;
+  restore_parser_state (&ps);
+  reset_parser ();
+  /* reset_parser clears shell_input_line and associated variables */
+  restore_input_line_state (&ls);
+  if (interactive)
+    token_to_read = 0;
+
+  /* Need to find how many characters parse_and_execute consumed, update
+     *indp, if flags != 0, copy the portion of the string parsed into RET
+     and return it.  If flags & 1 (EX_NOALLOC) we can return NULL. */
+
+  /*(*/
+  if (ep[-1] != ')')
+    {
+#if DEBUG
+      if (ep[-1] != '\n')
+       itrace("xparse_dolparen:%d: ep[-1] != RPAREN (%d), ep = `%s'", line_number, ep[-1], ep);
+#endif
+      while (ep > ostring && ep[-1] == '\n') ep--;
+    }
+
+  nc = ep - ostring;
+  *indp = ep - base - 1;
+
+  /*(*/
+#if DEBUG
+  if (base[*indp] != ')')
+    itrace("xparse_dolparen:%d: base[%d] != RPAREN (%d), base = `%s'", line_number, *indp, base[*indp], base);
+#endif
+
+  if (flags & SX_NOALLOC) 
+    return (char *)NULL;
+
+  if (nc == 0)
+    {
+      ret = xmalloc (1);
+      ret[0] = '\0';
+    }
+  else
+    ret = substring (ostring, 0, nc - 1);
+
+  return ret;
+}
+
+#if defined (DPAREN_ARITHMETIC) || defined (ARITH_FOR_COMMAND)
+/* Parse a double-paren construct.  It can be either an arithmetic
+   command, an arithmetic `for' command, or a nested subshell.  Returns
+   the parsed token, -1 on error, or -2 if we didn't do anything and
+   should just go on. */
+static int
+parse_dparen (c)
+     int c;
+{
+  int cmdtyp, sline;
+  char *wval;
+  WORD_DESC *wd;
+
+#if defined (ARITH_FOR_COMMAND)
+  if (last_read_token == FOR)
+    {
+      arith_for_lineno = line_number;
+      cmdtyp = parse_arith_cmd (&wval, 0);
+      if (cmdtyp == 1)
+       {
+         wd = alloc_word_desc ();
+         wd->word = wval;
+         yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
+         return (ARITH_FOR_EXPRS);
+       }
+      else
+       return -1;              /* ERROR */
+    }
+#endif
+
+#if defined (DPAREN_ARITHMETIC)
+  if (reserved_word_acceptable (last_read_token))
+    {
+      sline = line_number;
+
+      cmdtyp = parse_arith_cmd (&wval, 0);
+      if (cmdtyp == 1) /* arithmetic command */
+       {
+         wd = alloc_word_desc ();
+         wd->word = wval;
+         wd->flags = W_QUOTED|W_NOSPLIT|W_NOGLOB|W_DQUOTE;
+         yylval.word_list = make_word_list (wd, (WORD_LIST *)NULL);
+         return (ARITH_CMD);
+       }
+      else if (cmdtyp == 0)    /* nested subshell */
+       {
+         push_string (wval, 0, (alias_t *)NULL);
+         pushed_string_list->flags = PSH_DPAREN;
+         if ((parser_state & PST_CASEPAT) == 0)
+           parser_state |= PST_SUBSHELL;
+         return (c);
+       }
+      else                     /* ERROR */
+       return -1;
+    }
+#endif
+
+  return -2;                   /* XXX */
+}
+
+/* We've seen a `(('.  Look for the matching `))'.  If we get it, return 1.
+   If not, assume it's a nested subshell for backwards compatibility and
+   return 0.  In any case, put the characters we've consumed into a locally-
+   allocated buffer and make *ep point to that buffer.  Return -1 on an
+   error, for example EOF. */
+static int
+parse_arith_cmd (ep, adddq)
+     char **ep;
+     int adddq;
+{
+  int exp_lineno, rval, c;
+  char *ttok, *tokstr;
+  int ttoklen;
+
+  exp_lineno = line_number;
+  ttok = parse_matched_pair (0, '(', ')', &ttoklen, 0);
+  rval = 1;
+  if (ttok == &matched_pair_error)
+    return -1;
+  /* Check that the next character is the closing right paren.  If
+     not, this is a syntax error. ( */
+  c = shell_getc (0);
+  if MBTEST(c != ')')
+    rval = 0;
+
+  tokstr = (char *)xmalloc (ttoklen + 4);
+
+  /* if ADDDQ != 0 then (( ... )) -> "..." */
+  if (rval == 1 && adddq)      /* arith cmd, add double quotes */
+    {
+      tokstr[0] = '"';
+      strncpy (tokstr + 1, ttok, ttoklen - 1);
+      tokstr[ttoklen] = '"';
+      tokstr[ttoklen+1] = '\0';
+    }
+  else if (rval == 1)          /* arith cmd, don't add double quotes */
+    {
+      strncpy (tokstr, ttok, ttoklen - 1);
+      tokstr[ttoklen-1] = '\0';
+    }
+  else                         /* nested subshell */
+    {
+      tokstr[0] = '(';
+      strncpy (tokstr + 1, ttok, ttoklen - 1);
+      tokstr[ttoklen] = ')';
+      tokstr[ttoklen+1] = c;
+      tokstr[ttoklen+2] = '\0';
+    }
+
+  *ep = tokstr;
+  FREE (ttok);
+  return rval;
+}
+#endif /* DPAREN_ARITHMETIC || ARITH_FOR_COMMAND */
+
+#if defined (COND_COMMAND)
+static void
+cond_error ()
+{
+  char *etext;
+
+  if (EOF_Reached && cond_token != COND_ERROR)         /* [[ */
+    parser_error (cond_lineno, _("unexpected EOF while looking for `]]'"));
+  else if (cond_token != COND_ERROR)
+    {
+      if (etext = error_token_from_token (cond_token))
+       {
+         parser_error (cond_lineno, _("syntax error in conditional expression: unexpected token `%s'"), etext);
+         free (etext);
+       }
+      else
+       parser_error (cond_lineno, _("syntax error in conditional expression"));
+    }
+}
+
+static COND_COM *
+cond_expr ()
+{
+  return (cond_or ());  
+}
+
+static COND_COM *
+cond_or ()
+{
+  COND_COM *l, *r;
+
+  l = cond_and ();
+  if (cond_token == OR_OR)
+    {
+      r = cond_or ();
+      l = make_cond_node (COND_OR, (WORD_DESC *)NULL, l, r);
+    }
+  return l;
+}
+
+static COND_COM *
+cond_and ()
+{
+  COND_COM *l, *r;
+
+  l = cond_term ();
+  if (cond_token == AND_AND)
+    {
+      r = cond_and ();
+      l = make_cond_node (COND_AND, (WORD_DESC *)NULL, l, r);
+    }
+  return l;
+}
+
+static int
+cond_skip_newlines ()
+{
+  while ((cond_token = read_token (READ)) == '\n')
+    {
+      if (SHOULD_PROMPT ())
+       prompt_again ();
+    }
+  return (cond_token);
+}
+
+#define COND_RETURN_ERROR() \
+  do { cond_token = COND_ERROR; return ((COND_COM *)NULL); } while (0)
+
+static COND_COM *
+cond_term ()
+{
+  WORD_DESC *op;
+  COND_COM *term, *tleft, *tright;
+  int tok, lineno;
+  char *etext;
+
+  /* Read a token.  It can be a left paren, a `!', a unary operator, or a
+     word that should be the first argument of a binary operator.  Start by
+     skipping newlines, since this is a compound command. */
+  tok = cond_skip_newlines ();
+  lineno = line_number;
+  if (tok == COND_END)
+    {
+      COND_RETURN_ERROR ();
+    }
+  else if (tok == '(')
+    {
+      term = cond_expr ();
+      if (cond_token != ')')
+       {
+         if (term)
+           dispose_cond_node (term);           /* ( */
+         if (etext = error_token_from_token (cond_token))
+           {
+             parser_error (lineno, _("unexpected token `%s', expected `)'"), etext);
+             free (etext);
+           }
+         else
+           parser_error (lineno, _("expected `)'"));
+         COND_RETURN_ERROR ();
+       }
+      term = make_cond_node (COND_EXPR, (WORD_DESC *)NULL, term, (COND_COM *)NULL);
+      (void)cond_skip_newlines ();
+    }
+  else if (tok == BANG || (tok == WORD && (yylval.word->word[0] == '!' && yylval.word->word[1] == '\0')))
+    {
+      if (tok == WORD)
+       dispose_word (yylval.word);     /* not needed */
+      term = cond_term ();
+      if (term)
+       term->flags |= CMD_INVERT_RETURN;
+    }
+  else if (tok == WORD && yylval.word->word[0] == '-' && yylval.word->word[2] == 0 && test_unop (yylval.word->word))
+    {
+      op = yylval.word;
+      tok = read_token (READ);
+      if (tok == WORD)
+       {
+         tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
+         term = make_cond_node (COND_UNARY, op, tleft, (COND_COM *)NULL);
+       }
+      else
+       {
+         dispose_word (op);
+         if (etext = error_token_from_token (tok))
+           {
+             parser_error (line_number, _("unexpected argument `%s' to conditional unary operator"), etext);
+             free (etext);
+           }
+         else
+           parser_error (line_number, _("unexpected argument to conditional unary operator"));
+         COND_RETURN_ERROR ();
+       }
+
+      (void)cond_skip_newlines ();
+    }
+  else if (tok == WORD)                /* left argument to binary operator */
+    {
+      /* lhs */
+      tleft = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
+
+      /* binop */
+      tok = read_token (READ);
+      if (tok == WORD && test_binop (yylval.word->word))
+       {
+         op = yylval.word;
+         if (op->word[0] == '=' && (op->word[1] == '\0' || (op->word[1] == '=' && op->word[2] == '\0')))
+           parser_state |= PST_EXTPAT;
+         else if (op->word[0] == '!' && op->word[1] == '=' && op->word[2] == '\0')
+           parser_state |= PST_EXTPAT;
+       }
+#if defined (COND_REGEXP)
+      else if (tok == WORD && STREQ (yylval.word->word, "=~"))
+       {
+         op = yylval.word;
+         parser_state |= PST_REGEXP;
+       }
+#endif
+      else if (tok == '<' || tok == '>')
+       op = make_word_from_token (tok);  /* ( */
+      /* There should be a check before blindly accepting the `)' that we have
+        seen the opening `('. */
+      else if (tok == COND_END || tok == AND_AND || tok == OR_OR || tok == ')')
+       {
+         /* Special case.  [[ x ]] is equivalent to [[ -n x ]], just like
+            the test command.  Similarly for [[ x && expr ]] or
+            [[ x || expr ]] or [[ (x) ]]. */
+         op = make_word ("-n");
+         term = make_cond_node (COND_UNARY, op, tleft, (COND_COM *)NULL);
+         cond_token = tok;
+         return (term);
+       }
+      else
+       {
+         if (etext = error_token_from_token (tok))
+           {
+             parser_error (line_number, _("unexpected token `%s', conditional binary operator expected"), etext);
+             free (etext);
+           }
+         else
+           parser_error (line_number, _("conditional binary operator expected"));
+         dispose_cond_node (tleft);
+         COND_RETURN_ERROR ();
+       }
+
+      /* rhs */
+      if (parser_state & PST_EXTPAT)
+       extended_glob = 1;
+      tok = read_token (READ);
+      if (parser_state & PST_EXTPAT)
+       extended_glob = global_extglob;
+      parser_state &= ~(PST_REGEXP|PST_EXTPAT);
+
+      if (tok == WORD)
+       {
+         tright = make_cond_node (COND_TERM, yylval.word, (COND_COM *)NULL, (COND_COM *)NULL);
+         term = make_cond_node (COND_BINARY, op, tleft, tright);
+       }
+      else
+       {
+         if (etext = error_token_from_token (tok))
+           {
+             parser_error (line_number, _("unexpected argument `%s' to conditional binary operator"), etext);
+             free (etext);
+           }
+         else
+           parser_error (line_number, _("unexpected argument to conditional binary operator"));
+         dispose_cond_node (tleft);
+         dispose_word (op);
+         COND_RETURN_ERROR ();
+       }
+
+      (void)cond_skip_newlines ();
+    }
+  else
+    {
+      if (tok < 256)
+       parser_error (line_number, _("unexpected token `%c' in conditional command"), tok);
+      else if (etext = error_token_from_token (tok))
+       {
+         parser_error (line_number, _("unexpected token `%s' in conditional command"), etext);
+         free (etext);
+       }
+      else
+       parser_error (line_number, _("unexpected token %d in conditional command"), tok);
+      COND_RETURN_ERROR ();
+    }
+  return (term);
+}      
+
+/* This is kind of bogus -- we slip a mini recursive-descent parser in
+   here to handle the conditional statement syntax. */
+static COMMAND *
+parse_cond_command ()
+{
+  COND_COM *cexp;
+
+  global_extglob = extended_glob;
+  cexp = cond_expr ();
+  return (make_cond_command (cexp));
+}
+#endif
+
+#if defined (ARRAY_VARS)
+/* When this is called, it's guaranteed that we don't care about anything
+   in t beyond i.  We do save and restore the chars, though. */
+static int
+token_is_assignment (t, i)
+     char *t;
+     int i;
+{
+  unsigned char c, c1;
+  int r;
+
+  c = t[i]; c1 = t[i+1];
+  t[i] = '='; t[i+1] = '\0';
+  r = assignment (t, (parser_state & PST_COMPASSIGN) != 0);
+  t[i] = c; t[i+1] = c1;
+  return r;
+}
+
+/* XXX - possible changes here for `+=' */
+static int
+token_is_ident (t, i)
+     char *t;
+     int i;
+{
+  unsigned char c;
+  int r;
+
+  c = t[i];
+  t[i] = '\0';
+  r = legal_identifier (t);
+  t[i] = c;
+  return r;
+}
+#endif
+
+static int
+read_token_word (character)
+     int character;
+{
+  /* The value for YYLVAL when a WORD is read. */
+  WORD_DESC *the_word;
+
+  /* Index into the token that we are building. */
+  int token_index;
+
+  /* ALL_DIGITS becomes zero when we see a non-digit. */
+  int all_digit_token;
+
+  /* DOLLAR_PRESENT becomes non-zero if we see a `$'. */
+  int dollar_present;
+
+  /* COMPOUND_ASSIGNMENT becomes non-zero if we are parsing a compound
+     assignment. */
+  int compound_assignment;
+
+  /* QUOTED becomes non-zero if we see one of ("), ('), (`), or (\). */
+  int quoted;
+
+  /* Non-zero means to ignore the value of the next character, and just
+     to add it no matter what. */
+ int pass_next_character;
+
+  /* The current delimiting character. */
+  int cd;
+  int result, peek_char;
+  char *ttok, *ttrans;
+  int ttoklen, ttranslen;
+  intmax_t lvalue;
+
+  if (token_buffer_size < TOKEN_DEFAULT_INITIAL_SIZE)
+    token = (char *)xrealloc (token, token_buffer_size = TOKEN_DEFAULT_INITIAL_SIZE);
+
+  token_index = 0;
+  all_digit_token = DIGIT (character);
+  dollar_present = quoted = pass_next_character = compound_assignment = 0;
+
+  for (;;)
+    {
+      if (character == EOF)
+       goto got_token;
+
+      if (pass_next_character)
+       {
+         pass_next_character = 0;
+         goto got_escaped_character;
+       }
+
+      cd = current_delimiter (dstack);
+
+      /* Handle backslashes.  Quote lots of things when not inside of
+        double-quotes, quote some things inside of double-quotes. */
+      if MBTEST(character == '\\')
+       {
+         peek_char = shell_getc (0);
+
+         /* Backslash-newline is ignored in all cases except
+            when quoted with single quotes. */
+         if (peek_char == '\n')
+           {
+             character = '\n';
+             goto next_character;
+           }
+         else
+           {
+             shell_ungetc (peek_char);
+
+             /* If the next character is to be quoted, note it now. */
+             if (cd == 0 || cd == '`' ||
+                 (cd == '"' && peek_char >= 0 && (sh_syntaxtab[peek_char] & CBSDQUOTE)))
+               pass_next_character++;
+
+             quoted = 1;
+             goto got_character;
+           }
+       }
+
+      /* Parse a matched pair of quote characters. */
+      if MBTEST(shellquote (character))
+       {
+         push_delimiter (dstack, character);
+         ttok = parse_matched_pair (character, character, character, &ttoklen, (character == '`') ? P_COMMAND : 0);
+         pop_delimiter (dstack);
+         if (ttok == &matched_pair_error)
+           return -1;          /* Bail immediately. */
+         RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
+                                 token_buffer_size, TOKEN_DEFAULT_GROW_SIZE);
+         token[token_index++] = character;
+         strcpy (token + token_index, ttok);
+         token_index += ttoklen;
+         all_digit_token = 0;
+         quoted = 1;
+         dollar_present |= (character == '"' && strchr (ttok, '$') != 0);
+         FREE (ttok);
+         goto next_character;
+       }
+
+#ifdef COND_REGEXP
+      /* When parsing a regexp as a single word inside a conditional command,
+        we need to special-case characters special to both the shell and
+        regular expressions.  Right now, that is only '(' and '|'. */ /*)*/
+      if MBTEST((parser_state & PST_REGEXP) && (character == '(' || character == '|'))         /*)*/
+       {
+         if (character == '|')
+           goto got_character;
+
+         push_delimiter (dstack, character);
+         ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
+         pop_delimiter (dstack);
+         if (ttok == &matched_pair_error)
+           return -1;          /* Bail immediately. */
+         RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
+                                 token_buffer_size, TOKEN_DEFAULT_GROW_SIZE);
+         token[token_index++] = character;
+         strcpy (token + token_index, ttok);
+         token_index += ttoklen;
+         FREE (ttok);
+         dollar_present = all_digit_token = 0;
+         goto next_character;
+       }
+#endif /* COND_REGEXP */
+
+#ifdef EXTENDED_GLOB
+      /* Parse a ksh-style extended pattern matching specification. */
+      if MBTEST(extended_glob && PATTERN_CHAR (character))
+       {
+         peek_char = shell_getc (1);
+         if MBTEST(peek_char == '(')           /* ) */
+           {
+             push_delimiter (dstack, peek_char);
+             ttok = parse_matched_pair (cd, '(', ')', &ttoklen, 0);
+             pop_delimiter (dstack);
+             if (ttok == &matched_pair_error)
+               return -1;              /* Bail immediately. */
+             RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 3,
+                                     token_buffer_size,
+                                     TOKEN_DEFAULT_GROW_SIZE);
+             token[token_index++] = character;
+             token[token_index++] = peek_char;
+             strcpy (token + token_index, ttok);
+             token_index += ttoklen;
+             FREE (ttok);
+             dollar_present = all_digit_token = 0;
+             goto next_character;
+           }
+         else
+           shell_ungetc (peek_char);
+       }
+#endif /* EXTENDED_GLOB */
+
+      /* If the delimiter character is not single quote, parse some of
+        the shell expansions that must be read as a single word. */
+      if (shellexp (character))
+       {
+         peek_char = shell_getc (1);
+         /* $(...), <(...), >(...), $((...)), ${...}, and $[...] constructs */
+         if MBTEST(peek_char == '(' ||
+               ((peek_char == '{' || peek_char == '[') && character == '$'))   /* ) ] } */
+           {
+             if (peek_char == '{')             /* } */
+               ttok = parse_matched_pair (cd, '{', '}', &ttoklen, P_FIRSTCLOSE|P_DOLBRACE);
+             else if (peek_char == '(')                /* ) */
+               {
+                 /* XXX - push and pop the `(' as a delimiter for use by
+                    the command-oriented-history code.  This way newlines
+                    appearing in the $(...) string get added to the
+                    history literally rather than causing a possibly-
+                    incorrect `;' to be added. ) */
+                 push_delimiter (dstack, peek_char);
+                 ttok = parse_comsub (cd, '(', ')', &ttoklen, P_COMMAND);
+                 pop_delimiter (dstack);
+               }
+             else
+               ttok = parse_matched_pair (cd, '[', ']', &ttoklen, 0);
+             if (ttok == &matched_pair_error)
+               return -1;              /* Bail immediately. */
+             RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 3,
+                                     token_buffer_size,
+                                     TOKEN_DEFAULT_GROW_SIZE);
+             token[token_index++] = character;
+             token[token_index++] = peek_char;
+             strcpy (token + token_index, ttok);
+             token_index += ttoklen;
+             FREE (ttok);
+             dollar_present = 1;
+             all_digit_token = 0;
+             goto next_character;
+           }
+         /* This handles $'...' and $"..." new-style quoted strings. */
+         else if MBTEST(character == '$' && (peek_char == '\'' || peek_char == '"'))
+           {
+             int first_line;
+
+             first_line = line_number;
+             push_delimiter (dstack, peek_char);
+             ttok = parse_matched_pair (peek_char, peek_char, peek_char,
+                                        &ttoklen,
+                                        (peek_char == '\'') ? P_ALLOWESC : 0);
+             pop_delimiter (dstack);
+             if (ttok == &matched_pair_error)
+               return -1;
+             if (peek_char == '\'')
+               {
+                 ttrans = ansiexpand (ttok, 0, ttoklen - 1, &ttranslen);
+                 free (ttok);
+
+                 /* Insert the single quotes and correctly quote any
+                    embedded single quotes (allowed because P_ALLOWESC was
+                    passed to parse_matched_pair). */
+                 ttok = sh_single_quote (ttrans);
+                 free (ttrans);
+                 ttranslen = strlen (ttok);
+                 ttrans = ttok;
+               }
+             else
+               {
+                 /* Try to locale-expand the converted string. */
+                 ttrans = localeexpand (ttok, 0, ttoklen - 1, first_line, &ttranslen);
+                 free (ttok);
+
+                 /* Add the double quotes back */
+                 ttok = sh_mkdoublequoted (ttrans, ttranslen, 0);
+                 free (ttrans);
+                 ttranslen += 2;
+                 ttrans = ttok;
+               }
+
+             RESIZE_MALLOCED_BUFFER (token, token_index, ttranslen + 1,
+                                     token_buffer_size,
+                                     TOKEN_DEFAULT_GROW_SIZE);
+             strcpy (token + token_index, ttrans);
+             token_index += ttranslen;
+             FREE (ttrans);
+             quoted = 1;
+             all_digit_token = 0;
+             goto next_character;
+           }
+         /* This could eventually be extended to recognize all of the
+            shell's single-character parameter expansions, and set flags.*/
+         else if MBTEST(character == '$' && peek_char == '$')
+           {
+             RESIZE_MALLOCED_BUFFER (token, token_index, 3,
+                                     token_buffer_size,
+                                     TOKEN_DEFAULT_GROW_SIZE);
+             token[token_index++] = '$';
+             token[token_index++] = peek_char;
+             dollar_present = 1;
+             all_digit_token = 0;
+             goto next_character;
+           }
+         else
+           shell_ungetc (peek_char);
+       }
+
+#if defined (ARRAY_VARS)
+      /* Identify possible array subscript assignment; match [...].  If
+        parser_state&PST_COMPASSIGN, we need to parse [sub]=words treating
+        `sub' as if it were enclosed in double quotes. */
+      else if MBTEST(character == '[' &&               /* ] */
+                    ((token_index > 0 && assignment_acceptable (last_read_token) && token_is_ident (token, token_index)) ||
+                     (token_index == 0 && (parser_state&PST_COMPASSIGN))))
+        {
+         ttok = parse_matched_pair (cd, '[', ']', &ttoklen, P_ARRAYSUB);
+         if (ttok == &matched_pair_error)
+           return -1;          /* Bail immediately. */
+         RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 2,
+                                 token_buffer_size,
+                                 TOKEN_DEFAULT_GROW_SIZE);
+         token[token_index++] = character;
+         strcpy (token + token_index, ttok);
+         token_index += ttoklen;
+         FREE (ttok);
+         all_digit_token = 0;
+         goto next_character;
+        }
+      /* Identify possible compound array variable assignment. */
+      else if MBTEST(character == '=' && token_index > 0 && (assignment_acceptable (last_read_token) || (parser_state & PST_ASSIGNOK)) && token_is_assignment (token, token_index))
+       {
+         peek_char = shell_getc (1);
+         if MBTEST(peek_char == '(')           /* ) */
+           {
+             ttok = parse_compound_assignment (&ttoklen);
+
+             RESIZE_MALLOCED_BUFFER (token, token_index, ttoklen + 4,
+                                     token_buffer_size,
+                                     TOKEN_DEFAULT_GROW_SIZE);
+
+             token[token_index++] = '=';
+             token[token_index++] = '(';
+             if (ttok)
+               {
+                 strcpy (token + token_index, ttok);
+                 token_index += ttoklen;
+               }
+             token[token_index++] = ')';
+             FREE (ttok);
+             all_digit_token = 0;
+             compound_assignment = 1;
+#if 1
+             goto next_character;
+#else
+             goto got_token;           /* ksh93 seems to do this */
+#endif
+           }
+         else
+           shell_ungetc (peek_char);
+       }
+#endif
+
+      /* When not parsing a multi-character word construct, shell meta-
+        characters break words. */
+      if MBTEST(shellbreak (character))
+       {
+         shell_ungetc (character);
+         goto got_token;
+       }
+
+got_character:
+
+      if (character == CTLESC || character == CTLNUL)
+       {
+         RESIZE_MALLOCED_BUFFER (token, token_index, 2, token_buffer_size,
+                                 TOKEN_DEFAULT_GROW_SIZE);
+         token[token_index++] = CTLESC;
+       }
+      else
+got_escaped_character:
+       RESIZE_MALLOCED_BUFFER (token, token_index, 1, token_buffer_size,
+                               TOKEN_DEFAULT_GROW_SIZE);
+
+      token[token_index++] = character;
+
+      all_digit_token &= DIGIT (character);
+      dollar_present |= character == '$';
+
+    next_character:
+      if (character == '\n' && SHOULD_PROMPT ())
+       prompt_again ();
+
+      /* We want to remove quoted newlines (that is, a \<newline> pair)
+        unless we are within single quotes or pass_next_character is
+        set (the shell equivalent of literal-next). */
+      cd = current_delimiter (dstack);
+      character = shell_getc (cd != '\'' && pass_next_character == 0);
+    }  /* end for (;;) */
+
+got_token:
+
+  /* Calls to RESIZE_MALLOCED_BUFFER ensure there is sufficient room. */
+  token[token_index] = '\0';
+
+  /* Check to see what thing we should return.  If the last_read_token
+     is a `<', or a `&', or the character which ended this token is
+     a '>' or '<', then, and ONLY then, is this input token a NUMBER.
+     Otherwise, it is just a word, and should be returned as such. */
+  if MBTEST(all_digit_token && (character == '<' || character == '>' ||
+                   last_read_token == LESS_AND ||
+                   last_read_token == GREATER_AND))
+      {
+       if (legal_number (token, &lvalue) && (int)lvalue == lvalue)
+         {
+           yylval.number = lvalue;
+           return (NUMBER);
+         }
+      }
+
+  /* Check for special case tokens. */
+  result = (last_shell_getc_is_singlebyte) ? special_case_tokens (token) : -1;
+  if (result >= 0)
+    return result;
+
+#if defined (ALIAS)
+  /* Posix.2 does not allow reserved words to be aliased, so check for all
+     of them, including special cases, before expanding the current token
+     as an alias. */
+  if MBTEST(posixly_correct)
+    CHECK_FOR_RESERVED_WORD (token);
+
+  /* Aliases are expanded iff EXPAND_ALIASES is non-zero, and quoting
+     inhibits alias expansion. */
+  if (expand_aliases && quoted == 0)
+    {
+      result = alias_expand_token (token);
+      if (result == RE_READ_TOKEN)
+       return (RE_READ_TOKEN);
+      else if (result == NO_EXPANSION)
+       parser_state &= ~PST_ALEXPNEXT;
+    }
+
+  /* If not in Posix.2 mode, check for reserved words after alias
+     expansion. */
+  if MBTEST(posixly_correct == 0)
+#endif
+    CHECK_FOR_RESERVED_WORD (token);
+
+  the_word = (WORD_DESC *)xmalloc (sizeof (WORD_DESC));
+  the_word->word = (char *)xmalloc (1 + token_index);
+  the_word->flags = 0;
+  strcpy (the_word->word, token);
+  if (dollar_present)
+    the_word->flags |= W_HASDOLLAR;
+  if (quoted)
+    the_word->flags |= W_QUOTED;               /*(*/
+  if (compound_assignment && token[token_index-1] == ')')
+    the_word->flags |= W_COMPASSIGN;
+  /* A word is an assignment if it appears at the beginning of a
+     simple command, or after another assignment word.  This is
+     context-dependent, so it cannot be handled in the grammar. */
+  if (assignment (token, (parser_state & PST_COMPASSIGN) != 0))
+    {
+      the_word->flags |= W_ASSIGNMENT;
+      /* Don't perform word splitting on assignment statements. */
+      if (assignment_acceptable (last_read_token) || (parser_state & PST_COMPASSIGN) != 0)
+       {
+         the_word->flags |= W_NOSPLIT;
+         if (parser_state & PST_COMPASSIGN)
+           the_word->flags |= W_NOGLOB;        /* XXX - W_NOBRACE? */
+       }
+    }
+
+  if (command_token_position (last_read_token))
+    {
+      struct builtin *b;
+      b = builtin_address_internal (token, 0);
+      if (b && (b->flags & ASSIGNMENT_BUILTIN))
+       parser_state |= PST_ASSIGNOK;
+      else if (STREQ (token, "eval") || STREQ (token, "let"))
+       parser_state |= PST_ASSIGNOK;
+    }
+
+  yylval.word = the_word;
+
+  if (token[0] == '{' && token[token_index-1] == '}' &&
+      (character == '<' || character == '>'))
+    {
+      /* can use token; already copied to the_word */
+      token[token_index-1] = '\0';
+#if defined (ARRAY_VARS)
+      if (legal_identifier (token+1) || valid_array_reference (token+1))
+#else
+      if (legal_identifier (token+1))
+#endif
+       {
+         strcpy (the_word->word, token+1);
+/*itrace("read_token_word: returning REDIR_WORD for %s", the_word->word);*/
+         return (REDIR_WORD);
+       }
+    }
+
+  result = ((the_word->flags & (W_ASSIGNMENT|W_NOSPLIT)) == (W_ASSIGNMENT|W_NOSPLIT))
+               ? ASSIGNMENT_WORD : WORD;
+
+  switch (last_read_token)
+    {
+    case FUNCTION:
+      parser_state |= PST_ALLOWOPNBRC;
+      function_dstart = line_number;
+      break;
+    case CASE:
+    case SELECT:
+    case FOR:
+      if (word_top < MAX_CASE_NEST)
+       word_top++;
+      word_lineno[word_top] = line_number;
+      break;
+    }
+
+  return (result);
+}
+
+/* Return 1 if TOKSYM is a token that after being read would allow
+   a reserved word to be seen, else 0. */
+static int
+reserved_word_acceptable (toksym)
+     int toksym;
+{
+  switch (toksym)
+    {
+    case '\n':
+    case ';':
+    case '(':
+    case ')':
+    case '|':
+    case '&':
+    case '{':
+    case '}':          /* XXX */
+    case AND_AND:
+    case BANG:
+    case BAR_AND:
+    case DO:
+    case DONE:
+    case ELIF:
+    case ELSE:
+    case ESAC:
+    case FI:
+    case IF:
+    case OR_OR:
+    case SEMI_SEMI:
+    case SEMI_AND:
+    case SEMI_SEMI_AND:
+    case THEN:
+    case TIME:
+    case TIMEOPT:
+    case TIMEIGN:
+    case COPROC:
+    case UNTIL:
+    case WHILE:
+    case 0:
+      return 1;
+    default:
+#if defined (COPROCESS_SUPPORT)
+      if (last_read_token == WORD && token_before_that == COPROC)
+       return 1;
+#endif
+      if (last_read_token == WORD && token_before_that == FUNCTION)
+       return 1;
+      return 0;
+    }
+}
+    
+/* Return the index of TOKEN in the alist of reserved words, or -1 if
+   TOKEN is not a shell reserved word. */
+int
+find_reserved_word (tokstr)
+     char *tokstr;
+{
+  int i;
+  for (i = 0; word_token_alist[i].word; i++)
+    if (STREQ (tokstr, word_token_alist[i].word))
+      return i;
+  return -1;
+}
+
+/* An interface to let the rest of the shell (primarily the completion
+   system) know what the parser is expecting. */
+int
+parser_in_command_position ()
+{
+  return (command_token_position (last_read_token));
+}
+
+#if 0
+#if defined (READLINE)
+/* Called after each time readline is called.  This insures that whatever
+   the new prompt string is gets propagated to readline's local prompt
+   variable. */
+static void
+reset_readline_prompt ()
+{
+  char *temp_prompt;
+
+  if (prompt_string_pointer)
+    {
+      temp_prompt = (*prompt_string_pointer)
+                       ? decode_prompt_string (*prompt_string_pointer)
+                       : (char *)NULL;
+
+      if (temp_prompt == 0)
+       {
+         temp_prompt = (char *)xmalloc (1);
+         temp_prompt[0] = '\0';
+       }
+
+      FREE (current_readline_prompt);
+      current_readline_prompt = temp_prompt;
+    }
+}
+#endif /* READLINE */
+#endif /* 0 */
+
+#if defined (HISTORY)
+/* A list of tokens which can be followed by newlines, but not by
+   semi-colons.  When concatenating multiple lines of history, the
+   newline separator for such tokens is replaced with a space. */
+static const int no_semi_successors[] = {
+  '\n', '{', '(', ')', ';', '&', '|',
+  CASE, DO, ELSE, IF, SEMI_SEMI, SEMI_AND, SEMI_SEMI_AND, THEN, UNTIL,
+  WHILE, AND_AND, OR_OR, IN,
+  0
+};
+
+/* If we are not within a delimited expression, try to be smart
+   about which separators can be semi-colons and which must be
+   newlines.  Returns the string that should be added into the
+   history entry.  LINE is the line we're about to add; it helps
+   make some more intelligent decisions in certain cases. */
+char *
+history_delimiting_chars (line)
+     const char *line;
+{
+  static int last_was_heredoc = 0;     /* was the last entry the start of a here document? */
+  register int i;
+
+  if ((parser_state & PST_HEREDOC) == 0)
+    last_was_heredoc = 0;
+
+  if (dstack.delimiter_depth != 0)
+    return ("\n");
+
+  /* We look for current_command_line_count == 2 because we are looking to
+     add the first line of the body of the here document (the second line
+     of the command).  We also keep LAST_WAS_HEREDOC as a private sentinel
+     variable to note when we think we added the first line of a here doc
+     (the one with a "<<" somewhere in it) */
+  if (parser_state & PST_HEREDOC)
+    {
+      if (last_was_heredoc)
+       {
+         last_was_heredoc = 0;
+         return "\n";
+       }
+      return (current_command_line_count == 2 ? "\n" : "");
+    }
+
+  if (parser_state & PST_COMPASSIGN)
+    return (" ");
+
+  /* First, handle some special cases. */
+  /*(*/
+  /* If we just read `()', assume it's a function definition, and don't
+     add a semicolon.  If the token before the `)' was not `(', and we're
+     not in the midst of parsing a case statement, assume it's a
+     parenthesized command and add the semicolon. */
+  /*)(*/
+  if (token_before_that == ')')
+    {
+      if (two_tokens_ago == '(')       /*)*/   /* function def */
+       return " ";
+      /* This does not work for subshells inside case statement
+        command lists.  It's a suboptimal solution. */
+      else if (parser_state & PST_CASESTMT)    /* case statement pattern */
+       return " ";
+      else     
+       return "; ";                            /* (...) subshell */
+    }
+  else if (token_before_that == WORD && two_tokens_ago == FUNCTION)
+    return " ";                /* function def using `function name' without `()' */
+
+  /* If we're not in a here document, but we think we're about to parse one,
+     and we would otherwise return a `;', return a newline to delimit the
+     line with the here-doc delimiter */
+  else if ((parser_state & PST_HEREDOC) == 0 && current_command_line_count > 1 && last_read_token == '\n' && strstr (line, "<<"))
+    {
+      last_was_heredoc = 1;
+      return "\n";
+    }
+
+  else if (token_before_that == WORD && two_tokens_ago == FOR)
+    {
+      /* Tricky.  `for i\nin ...' should not have a semicolon, but
+        `for i\ndo ...' should.  We do what we can. */
+      for (i = shell_input_line_index; whitespace (shell_input_line[i]); i++)
+       ;
+      if (shell_input_line[i] && shell_input_line[i] == 'i' && shell_input_line[i+1] == 'n')
+       return " ";
+      return ";";
+    }
+  else if (two_tokens_ago == CASE && token_before_that == WORD && (parser_state & PST_CASESTMT))
+    return " ";
+
+  for (i = 0; no_semi_successors[i]; i++)
+    {
+      if (token_before_that == no_semi_successors[i])
+       return (" ");
+    }
+
+  return ("; ");
+}
+#endif /* HISTORY */
+
+/* Issue a prompt, or prepare to issue a prompt when the next character
+   is read. */
+static void
+prompt_again ()
+{
+  char *temp_prompt;
+
+  if (interactive == 0 || expanding_alias ())  /* XXX */
+    return;
+
+  ps1_prompt = get_string_value ("PS1");
+  ps2_prompt = get_string_value ("PS2");
+
+  if (!prompt_string_pointer)
+    prompt_string_pointer = &ps1_prompt;
+
+  temp_prompt = *prompt_string_pointer
+                       ? decode_prompt_string (*prompt_string_pointer)
+                       : (char *)NULL;
+
+  if (temp_prompt == 0)
+    {
+      temp_prompt = (char *)xmalloc (1);
+      temp_prompt[0] = '\0';
+    }
+
+  current_prompt_string = *prompt_string_pointer;
+  prompt_string_pointer = &ps2_prompt;
+
+#if defined (READLINE)
+  if (!no_line_editing)
+    {
+      FREE (current_readline_prompt);
+      current_readline_prompt = temp_prompt;
+    }
+  else
+#endif /* READLINE */
+    {
+      FREE (current_decoded_prompt);
+      current_decoded_prompt = temp_prompt;
+    }
+}
+
+int
+get_current_prompt_level ()
+{
+  return ((current_prompt_string && current_prompt_string == ps2_prompt) ? 2 : 1);
+}
+
+void
+set_current_prompt_level (x)
+     int x;
+{
+  prompt_string_pointer = (x == 2) ? &ps2_prompt : &ps1_prompt;
+  current_prompt_string = *prompt_string_pointer;
+}
+      
+static void
+print_prompt ()
+{
+  fprintf (stderr, "%s", current_decoded_prompt);
+  fflush (stderr);
+}
+
+/* Return a string which will be printed as a prompt.  The string
+   may contain special characters which are decoded as follows:
+
+       \a      bell (ascii 07)
+       \d      the date in Day Mon Date format
+       \e      escape (ascii 033)
+       \h      the hostname up to the first `.'
+       \H      the hostname
+       \j      the number of active jobs
+       \l      the basename of the shell's tty device name
+       \n      CRLF
+       \r      CR
+       \s      the name of the shell
+       \t      the time in 24-hour hh:mm:ss format
+       \T      the time in 12-hour hh:mm:ss format
+       \@      the time in 12-hour hh:mm am/pm format
+       \A      the time in 24-hour hh:mm format
+       \D{fmt} the result of passing FMT to strftime(3)
+       \u      your username
+       \v      the version of bash (e.g., 2.00)
+       \V      the release of bash, version + patchlevel (e.g., 2.00.0)
+       \w      the current working directory
+       \W      the last element of $PWD
+       \!      the history number of this command
+       \#      the command number of this command
+       \$      a $ or a # if you are root
+       \nnn    character code nnn in octal
+       \\      a backslash
+       \[      begin a sequence of non-printing chars
+       \]      end a sequence of non-printing chars
+*/
+#define PROMPT_GROWTH 48
+char *
+decode_prompt_string (string)
+     char *string;
+{
+  WORD_LIST *list;
+  char *result, *t;
+  struct dstack save_dstack;
+  int last_exit_value, last_comsub_pid;
+#if defined (PROMPT_STRING_DECODE)
+  int result_size, result_index;
+  int c, n, i;
+  char *temp, octal_string[4];
+  struct tm *tm;  
+  time_t the_time;
+  char timebuf[128];
+  char *timefmt;
+
+  result = (char *)xmalloc (result_size = PROMPT_GROWTH);
+  result[result_index = 0] = 0;
+  temp = (char *)NULL;
+
+  while (c = *string++)
+    {
+      if (posixly_correct && c == '!')
+       {
+         if (*string == '!')
+           {
+             temp = savestring ("!");
+             goto add_string;
+           }
+         else
+           {
+#if !defined (HISTORY)
+               temp = savestring ("1");
+#else /* HISTORY */
+               temp = itos (history_number ());
+#endif /* HISTORY */
+               string--;       /* add_string increments string again. */
+               goto add_string;
+           }
+       }
+      if (c == '\\')
+       {
+         c = *string;
+
+         switch (c)
+           {
+           case '0':
+           case '1':
+           case '2':
+           case '3':
+           case '4':
+           case '5':
+           case '6':
+           case '7':
+             strncpy (octal_string, string, 3);
+             octal_string[3] = '\0';
+
+             n = read_octal (octal_string);
+             temp = (char *)xmalloc (3);
+
+             if (n == CTLESC || n == CTLNUL)
+               {
+                 temp[0] = CTLESC;
+                 temp[1] = n;
+                 temp[2] = '\0';
+               }
+             else if (n == -1)
+               {
+                 temp[0] = '\\';
+                 temp[1] = '\0';
+               }
+             else
+               {
+                 temp[0] = n;
+                 temp[1] = '\0';
+               }
+
+             for (c = 0; n != -1 && c < 3 && ISOCTAL (*string); c++)
+               string++;
+
+             c = 0;            /* tested at add_string: */
+             goto add_string;
+
+           case 'd':
+           case 't':
+           case 'T':
+           case '@':
+           case 'A':
+             /* Make the current time/date into a string. */
+             (void) time (&the_time);
+#if defined (HAVE_TZSET)
+             sv_tz ("TZ");             /* XXX -- just make sure */
+#endif
+             tm = localtime (&the_time);
+
+             if (c == 'd')
+               n = strftime (timebuf, sizeof (timebuf), "%a %b %d", tm);
+             else if (c == 't')
+               n = strftime (timebuf, sizeof (timebuf), "%H:%M:%S", tm);
+             else if (c == 'T')
+               n = strftime (timebuf, sizeof (timebuf), "%I:%M:%S", tm);
+             else if (c == '@')
+               n = strftime (timebuf, sizeof (timebuf), "%I:%M %p", tm);
+             else if (c == 'A')
+               n = strftime (timebuf, sizeof (timebuf), "%H:%M", tm);
+
+             if (n == 0)
+               timebuf[0] = '\0';
+             else
+               timebuf[sizeof(timebuf) - 1] = '\0';
+
+             temp = savestring (timebuf);
+             goto add_string;
+
+           case 'D':           /* strftime format */
+             if (string[1] != '{')             /* } */
+               goto not_escape;
+
+             (void) time (&the_time);
+             tm = localtime (&the_time);
+             string += 2;                      /* skip { */
+             timefmt = xmalloc (strlen (string) + 3);
+             for (t = timefmt; *string && *string != '}'; )
+               *t++ = *string++;
+             *t = '\0';
+             c = *string;      /* tested at add_string */
+             if (timefmt[0] == '\0')
+               {
+                 timefmt[0] = '%';
+                 timefmt[1] = 'X';     /* locale-specific current time */
+                 timefmt[2] = '\0';
+               }
+             n = strftime (timebuf, sizeof (timebuf), timefmt, tm);
+             free (timefmt);
+
+             if (n == 0)
+               timebuf[0] = '\0';
+             else
+               timebuf[sizeof(timebuf) - 1] = '\0';
+
+             if (promptvars || posixly_correct)
+               /* Make sure that expand_prompt_string is called with a
+                  second argument of Q_DOUBLE_QUOTES if we use this
+                  function here. */
+               temp = sh_backslash_quote_for_double_quotes (timebuf);
+             else
+               temp = savestring (timebuf);
+             goto add_string;
+             
+           case 'n':
+             temp = (char *)xmalloc (3);
+             temp[0] = no_line_editing ? '\n' : '\r';
+             temp[1] = no_line_editing ? '\0' : '\n';
+             temp[2] = '\0';
+             goto add_string;
+
+           case 's':
+             temp = base_pathname (shell_name);
+             temp = savestring (temp);
+             goto add_string;
+
+           case 'v':
+           case 'V':
+             temp = (char *)xmalloc (16);
+             if (c == 'v')
+               strcpy (temp, dist_version);
+             else
+               sprintf (temp, "%s.%d", dist_version, patch_level);
+             goto add_string;
+
+           case 'w':
+           case 'W':
+             {
+               /* Use the value of PWD because it is much more efficient. */
+               char t_string[PATH_MAX];
+               int tlen;
+
+               temp = get_string_value ("PWD");
+
+               if (temp == 0)
+                 {
+                   if (getcwd (t_string, sizeof(t_string)) == 0)
+                     {
+                       t_string[0] = '.';
+                       tlen = 1;
+                     }
+                   else
+                     tlen = strlen (t_string);
+                 }
+               else
+                 {
+                   tlen = sizeof (t_string) - 1;
+                   strncpy (t_string, temp, tlen);
+                 }
+               t_string[tlen] = '\0';
+
+#if defined (MACOSX)
+               /* Convert from "fs" format to "input" format */
+               temp = fnx_fromfs (t_string, strlen (t_string));
+               if (temp != t_string)
+                 strcpy (t_string, temp);
+#endif
+
+#define ROOT_PATH(x)   ((x)[0] == '/' && (x)[1] == 0)
+#define DOUBLE_SLASH_ROOT(x)   ((x)[0] == '/' && (x)[1] == '/' && (x)[2] == 0)
+               /* Abbreviate \W as ~ if $PWD == $HOME */
+               if (c == 'W' && (((t = get_string_value ("HOME")) == 0) || STREQ (t, t_string) == 0))
+                 {
+                   if (ROOT_PATH (t_string) == 0 && DOUBLE_SLASH_ROOT (t_string) == 0)
+                     {
+                       t = strrchr (t_string, '/');
+                       if (t)
+                         memmove (t_string, t + 1, strlen (t));        /* strlen(t) to copy NULL */
+                     }
+                 }
+#undef ROOT_PATH
+#undef DOUBLE_SLASH_ROOT
+               else
+                 {
+                   /* polite_directory_format is guaranteed to return a string
+                      no longer than PATH_MAX - 1 characters. */
+                   temp = polite_directory_format (t_string);
+                   if (temp != t_string)
+                     strcpy (t_string, temp);
+                 }
+
+               temp = trim_pathname (t_string, PATH_MAX - 1);
+               /* If we're going to be expanding the prompt string later,
+                  quote the directory name. */
+               if (promptvars || posixly_correct)
+                 /* Make sure that expand_prompt_string is called with a
+                    second argument of Q_DOUBLE_QUOTES if we use this
+                    function here. */
+                 temp = sh_backslash_quote_for_double_quotes (t_string);
+               else
+                 temp = savestring (t_string);
+
+               goto add_string;
+             }
+
+           case 'u':
+             if (current_user.user_name == 0)
+               get_current_user_info ();
+             temp = savestring (current_user.user_name);
+             goto add_string;
+
+           case 'h':
+           case 'H':
+             temp = savestring (current_host_name);
+             if (c == 'h' && (t = (char *)strchr (temp, '.')))
+               *t = '\0';
+             goto add_string;
+
+           case '#':
+             temp = itos (current_command_number);
+             goto add_string;
+
+           case '!':
+#if !defined (HISTORY)
+             temp = savestring ("1");
+#else /* HISTORY */
+             temp = itos (history_number ());
+#endif /* HISTORY */
+             goto add_string;
+
+           case '$':
+             t = temp = (char *)xmalloc (3);
+             if ((promptvars || posixly_correct) && (current_user.euid != 0))
+               *t++ = '\\';
+             *t++ = current_user.euid == 0 ? '#' : '$';
+             *t = '\0';
+             goto add_string;
+
+           case 'j':
+             temp = itos (count_all_jobs ());
+             goto add_string;
+
+           case 'l':
+#if defined (HAVE_TTYNAME)
+             temp = (char *)ttyname (fileno (stdin));
+             t = temp ? base_pathname (temp) : "tty";
+             temp = savestring (t);
+#else
+             temp = savestring ("tty");
+#endif /* !HAVE_TTYNAME */
+             goto add_string;
+
+#if defined (READLINE)
+           case '[':
+           case ']':
+             if (no_line_editing)
+               {
+                 string++;
+                 break;
+               }
+             temp = (char *)xmalloc (3);
+             n = (c == '[') ? RL_PROMPT_START_IGNORE : RL_PROMPT_END_IGNORE;
+             i = 0;
+             if (n == CTLESC || n == CTLNUL)
+               temp[i++] = CTLESC;
+             temp[i++] = n;
+             temp[i] = '\0';
+             goto add_string;
+#endif /* READLINE */
+
+           case '\\':
+           case 'a':
+           case 'e':
+           case 'r':
+             temp = (char *)xmalloc (2);
+             if (c == 'a')
+               temp[0] = '\07';
+             else if (c == 'e')
+               temp[0] = '\033';
+             else if (c == 'r')
+               temp[0] = '\r';
+             else                      /* (c == '\\') */
+               temp[0] = c;
+             temp[1] = '\0';
+             goto add_string;
+
+           default:
+not_escape:
+             temp = (char *)xmalloc (3);
+             temp[0] = '\\';
+             temp[1] = c;
+             temp[2] = '\0';
+
+           add_string:
+             if (c)
+               string++;
+             result =
+               sub_append_string (temp, result, &result_index, &result_size);
+             temp = (char *)NULL; /* Freed in sub_append_string (). */
+             result[result_index] = '\0';
+             break;
+           }
+       }
+      else
+       {
+         RESIZE_MALLOCED_BUFFER (result, result_index, 3, result_size, PROMPT_GROWTH);
+         result[result_index++] = c;
+         result[result_index] = '\0';
+       }
+    }
+#else /* !PROMPT_STRING_DECODE */
+  result = savestring (string);
+#endif /* !PROMPT_STRING_DECODE */
+
+  /* Save the delimiter stack and point `dstack' to temp space so any
+     command substitutions in the prompt string won't result in screwing
+     up the parser's quoting state. */
+  save_dstack = dstack;
+  dstack = temp_dstack;
+  dstack.delimiter_depth = 0;
+
+  /* Perform variable and parameter expansion and command substitution on
+     the prompt string. */
+  if (promptvars || posixly_correct)
+    {
+      last_exit_value = last_command_exit_value;
+      last_comsub_pid = last_command_subst_pid;
+      list = expand_prompt_string (result, Q_DOUBLE_QUOTES, 0);
+      free (result);
+      result = string_list (list);
+      dispose_words (list);
+      last_command_exit_value = last_exit_value;
+      last_command_subst_pid = last_comsub_pid;
+    }
+  else
+    {
+      t = dequote_string (result);
+      free (result);
+      result = t;
+    }
+
+  dstack = save_dstack;
+
+  return (result);
+}
+
+/************************************************
+ *                                             *
+ *             ERROR HANDLING                  *
+ *                                             *
+ ************************************************/
+
+/* Report a syntax error, and restart the parser.  Call here for fatal
+   errors. */
+int
+yyerror (msg)
+     const char *msg;
+{
+  report_syntax_error ((char *)NULL);
+  reset_parser ();
+  return (0);
+}
+
+static char *
+error_token_from_token (tok)
+     int tok;
+{
+  char *t;
+
+  if (t = find_token_in_alist (tok, word_token_alist, 0))
+    return t;
+
+  if (t = find_token_in_alist (tok, other_token_alist, 0))
+    return t;
+
+  t = (char *)NULL;
+  /* This stuff is dicy and needs closer inspection */
+  switch (current_token)
+    {
+    case WORD:
+    case ASSIGNMENT_WORD:
+      if (yylval.word)
+       t = savestring (yylval.word->word);
+      break;
+    case NUMBER:
+      t = itos (yylval.number);
+      break;
+    case ARITH_CMD:
+      if (yylval.word_list)
+        t = string_list (yylval.word_list);
+      break;
+    case ARITH_FOR_EXPRS:
+      if (yylval.word_list)
+       t = string_list_internal (yylval.word_list, " ; ");
+      break;
+    case COND_CMD:
+      t = (char *)NULL;                /* punt */
+      break;
+    }
+
+  return t;
+}
+
+static char *
+error_token_from_text ()
+{
+  char *msg, *t;
+  int token_end, i;
+
+  t = shell_input_line;
+  i = shell_input_line_index;
+  token_end = 0;
+  msg = (char *)NULL;
+
+  if (i && t[i] == '\0')
+    i--;
+
+  while (i && (whitespace (t[i]) || t[i] == '\n'))
+    i--;
+
+  if (i)
+    token_end = i + 1;
+
+  while (i && (member (t[i], " \n\t;|&") == 0))
+    i--;
+
+  while (i != token_end && (whitespace (t[i]) || t[i] == '\n'))
+    i++;
+
+  /* Return our idea of the offending token. */
+  if (token_end || (i == 0 && token_end == 0))
+    {
+      if (token_end)
+       msg = substring (t, i, token_end);
+      else     /* one-character token */
+       {
+         msg = (char *)xmalloc (2);
+         msg[0] = t[i];
+         msg[1] = '\0';
+       }
+    }
+
+  return (msg);
+}
+
+static void
+print_offending_line ()
+{
+  char *msg;
+  int token_end;
+
+  msg = savestring (shell_input_line);
+  token_end = strlen (msg);
+  while (token_end && msg[token_end - 1] == '\n')
+    msg[--token_end] = '\0';
+
+  parser_error (line_number, "`%s'", msg);
+  free (msg);
+}
+
+/* Report a syntax error with line numbers, etc.
+   Call here for recoverable errors.  If you have a message to print,
+   then place it in MESSAGE, otherwise pass NULL and this will figure
+   out an appropriate message for you. */
+static void
+report_syntax_error (message)
+     char *message;
+{
+  char *msg, *p;
+
+  if (message)
+    {
+      parser_error (line_number, "%s", message);
+      if (interactive && EOF_Reached)
+       EOF_Reached = 0;
+      last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
+      return;
+    }
+
+  /* If the line of input we're reading is not null, try to find the
+     objectionable token.  First, try to figure out what token the
+     parser's complaining about by looking at current_token. */
+  if (current_token != 0 && EOF_Reached == 0 && (msg = error_token_from_token (current_token)))
+    {
+      if (ansic_shouldquote (msg))
+       {
+         p = ansic_quote (msg, 0, NULL);
+         free (msg);
+         msg = p;
+       }
+      parser_error (line_number, _("syntax error near unexpected token `%s'"), msg);
+      free (msg);
+
+      if (interactive == 0)
+       print_offending_line ();
+
+      last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
+      return;
+    }
+
+  /* If looking at the current token doesn't prove fruitful, try to find the
+     offending token by analyzing the text of the input line near the current
+     input line index and report what we find. */
+  if (shell_input_line && *shell_input_line)
+    {
+      msg = error_token_from_text ();
+      if (msg)
+       {
+         parser_error (line_number, _("syntax error near `%s'"), msg);
+         free (msg);
+       }
+
+      /* If not interactive, print the line containing the error. */
+      if (interactive == 0)
+        print_offending_line ();
+    }
+  else
+    {
+      msg = EOF_Reached ? _("syntax error: unexpected end of file") : _("syntax error");
+      parser_error (line_number, "%s", msg);
+      /* When the shell is interactive, this file uses EOF_Reached
+        only for error reporting.  Other mechanisms are used to
+        decide whether or not to exit. */
+      if (interactive && EOF_Reached)
+       EOF_Reached = 0;
+    }
+
+  last_command_exit_value = parse_and_execute_level ? EX_BADSYNTAX : EX_BADUSAGE;
+}
+
+/* ??? Needed function. ??? We have to be able to discard the constructs
+   created during parsing.  In the case of error, we want to return
+   allocated objects to the memory pool.  In the case of no error, we want
+   to throw away the information about where the allocated objects live.
+   (dispose_command () will actually free the command.) */
+static void
+discard_parser_constructs (error_p)
+     int error_p;
+{
+}
+
+/************************************************
+ *                                             *
+ *             EOF HANDLING                    *
+ *                                             *
+ ************************************************/
+
+/* Do that silly `type "bye" to exit' stuff.  You know, "ignoreeof". */
+
+/* A flag denoting whether or not ignoreeof is set. */
+int ignoreeof = 0;
+
+/* The number of times that we have encountered an EOF character without
+   another character intervening.  When this gets above the limit, the
+   shell terminates. */
+int eof_encountered = 0;
+
+/* The limit for eof_encountered. */
+int eof_encountered_limit = 10;
+
+/* If we have EOF as the only input unit, this user wants to leave
+   the shell.  If the shell is not interactive, then just leave.
+   Otherwise, if ignoreeof is set, and we haven't done this the
+   required number of times in a row, print a message. */
+static void
+handle_eof_input_unit ()
+{
+  if (interactive)
+    {
+      /* shell.c may use this to decide whether or not to write out the
+        history, among other things.  We use it only for error reporting
+        in this file. */
+      if (EOF_Reached)
+       EOF_Reached = 0;
+
+      /* If the user wants to "ignore" eof, then let her do so, kind of. */
+      if (ignoreeof)
+       {
+         if (eof_encountered < eof_encountered_limit)
+           {
+             fprintf (stderr, _("Use \"%s\" to leave the shell.\n"),
+                      login_shell ? "logout" : "exit");
+             eof_encountered++;
+             /* Reset the parsing state. */
+             last_read_token = current_token = '\n';
+             /* Reset the prompt string to be $PS1. */
+             prompt_string_pointer = (char **)NULL;
+             prompt_again ();
+             return;
+           }
+       }
+
+      /* In this case EOF should exit the shell.  Do it now. */
+      reset_parser ();
+      exit_builtin ((WORD_LIST *)NULL);
+    }
+  else
+    {
+      /* We don't write history files, etc., for non-interactive shells. */
+      EOF_Reached = 1;
+    }
+}
+
+/************************************************
+ *                                             *
+ *     STRING PARSING FUNCTIONS                *
+ *                                             *
+ ************************************************/
+
+/* It's very important that these two functions treat the characters
+   between ( and ) identically. */
+
+static WORD_LIST parse_string_error;
+
+/* Take a string and run it through the shell parser, returning the
+   resultant word list.  Used by compound array assignment. */
+WORD_LIST *
+parse_string_to_word_list (s, flags, whom)
+     char *s;
+     int flags;
+     const char *whom;
+{
+  WORD_LIST *wl;
+  int tok, orig_current_token, orig_line_number, orig_input_terminator;
+  int orig_line_count;
+  int old_echo_input, old_expand_aliases;
+#if defined (HISTORY)
+  int old_remember_on_history, old_history_expansion_inhibited;
+#endif
+
+#if defined (HISTORY)
+  old_remember_on_history = remember_on_history;
+#  if defined (BANG_HISTORY)
+  old_history_expansion_inhibited = history_expansion_inhibited;
+#  endif
+  bash_history_disable ();
+#endif
+
+  orig_line_number = line_number;
+  orig_line_count = current_command_line_count;
+  orig_input_terminator = shell_input_line_terminator;
+  old_echo_input = echo_input_at_read;
+  old_expand_aliases = expand_aliases;
+
+  push_stream (1);
+  last_read_token = WORD;              /* WORD to allow reserved words here */
+  current_command_line_count = 0;
+  echo_input_at_read = expand_aliases = 0;
+
+  with_input_from_string (s, whom);
+  wl = (WORD_LIST *)NULL;
+
+  if (flags & 1)
+    parser_state |= PST_COMPASSIGN|PST_REPARSE;
+
+  while ((tok = read_token (READ)) != yacc_EOF)
+    {
+      if (tok == '\n' && *bash_input.location.string == '\0')
+       break;
+      if (tok == '\n')         /* Allow newlines in compound assignments */
+       continue;
+      if (tok != WORD && tok != ASSIGNMENT_WORD)
+       {
+         line_number = orig_line_number + line_number - 1;
+         orig_current_token = current_token;
+         current_token = tok;
+         yyerror (NULL);       /* does the right thing */
+         current_token = orig_current_token;
+         if (wl)
+           dispose_words (wl);
+         wl = &parse_string_error;
+         break;
+       }
+      wl = make_word_list (yylval.word, wl);
+    }
+  
+  last_read_token = '\n';
+  pop_stream ();
+
+#if defined (HISTORY)
+  remember_on_history = old_remember_on_history;
+#  if defined (BANG_HISTORY)
+  history_expansion_inhibited = old_history_expansion_inhibited;
+#  endif /* BANG_HISTORY */
+#endif /* HISTORY */
+
+  echo_input_at_read = old_echo_input;
+  expand_aliases = old_expand_aliases;
+
+  current_command_line_count = orig_line_count;
+  shell_input_line_terminator = orig_input_terminator;
+
+  if (flags & 1)
+    parser_state &= ~(PST_COMPASSIGN|PST_REPARSE);
+
+  if (wl == &parse_string_error)
+    {
+      last_command_exit_value = EXECUTION_FAILURE;
+      if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+      else
+       jump_to_top_level (DISCARD);
+    }
+
+  return (REVERSE_LIST (wl, WORD_LIST *));
+}
+
+static char *
+parse_compound_assignment (retlenp)
+     int *retlenp;
+{
+  WORD_LIST *wl, *rl;
+  int tok, orig_line_number, orig_token_size, orig_last_token, assignok;
+  char *saved_token, *ret;
+
+  saved_token = token;
+  orig_token_size = token_buffer_size;
+  orig_line_number = line_number;
+  orig_last_token = last_read_token;
+
+  last_read_token = WORD;      /* WORD to allow reserved words here */
+
+  token = (char *)NULL;
+  token_buffer_size = 0;
+
+  assignok = parser_state&PST_ASSIGNOK;                /* XXX */
+
+  wl = (WORD_LIST *)NULL;      /* ( */
+  parser_state |= PST_COMPASSIGN;
+
+  while ((tok = read_token (READ)) != ')')
+    {
+      if (tok == '\n')                 /* Allow newlines in compound assignments */
+       {
+         if (SHOULD_PROMPT ())
+           prompt_again ();
+         continue;
+       }
+      if (tok != WORD && tok != ASSIGNMENT_WORD)
+       {
+         current_token = tok;  /* for error reporting */
+         if (tok == yacc_EOF)  /* ( */
+           parser_error (orig_line_number, _("unexpected EOF while looking for matching `)'"));
+         else
+           yyerror(NULL);      /* does the right thing */
+         if (wl)
+           dispose_words (wl);
+         wl = &parse_string_error;
+         break;
+       }
+      wl = make_word_list (yylval.word, wl);
+    }
+
+  FREE (token);
+  token = saved_token;
+  token_buffer_size = orig_token_size;
+
+  parser_state &= ~PST_COMPASSIGN;
+
+  if (wl == &parse_string_error)
+    {
+      last_command_exit_value = EXECUTION_FAILURE;
+      last_read_token = '\n';  /* XXX */
+      if (interactive_shell == 0 && posixly_correct)
+       jump_to_top_level (FORCE_EOF);
+      else
+       jump_to_top_level (DISCARD);
+    }
+
+  last_read_token = orig_last_token;           /* XXX - was WORD? */
+
+  if (wl)
+    {
+      rl = REVERSE_LIST (wl, WORD_LIST *);
+      ret = string_list (rl);
+      dispose_words (rl);
+    }
+  else
+    ret = (char *)NULL;
+
+  if (retlenp)
+    *retlenp = (ret && *ret) ? strlen (ret) : 0;
+
+  if (assignok)
+    parser_state |= PST_ASSIGNOK;
+
+  return ret;
+}
+
+/************************************************
+ *                                             *
+ *   SAVING AND RESTORING PARTIAL PARSE STATE   *
+ *                                             *
+ ************************************************/
+
+sh_parser_state_t *
+save_parser_state (ps)
+     sh_parser_state_t *ps;
+{
+  if (ps == 0)
+    ps = (sh_parser_state_t *)xmalloc (sizeof (sh_parser_state_t));
+  if (ps == 0)
+    return ((sh_parser_state_t *)NULL);
+
+  ps->parser_state = parser_state;
+  ps->token_state = save_token_state ();
+
+  ps->input_line_terminator = shell_input_line_terminator;
+  ps->eof_encountered = eof_encountered;
+
+  ps->prompt_string_pointer = prompt_string_pointer;
+
+  ps->current_command_line_count = current_command_line_count;
+
+#if defined (HISTORY)
+  ps->remember_on_history = remember_on_history;
+#  if defined (BANG_HISTORY)
+  ps->history_expansion_inhibited = history_expansion_inhibited;
+#  endif
+#endif
+
+  ps->last_command_exit_value = last_command_exit_value;
+#if defined (ARRAY_VARS)
+  ps->pipestatus = save_pipestatus_array ();
+#endif
+    
+  ps->last_shell_builtin = last_shell_builtin;
+  ps->this_shell_builtin = this_shell_builtin;
+
+  ps->expand_aliases = expand_aliases;
+  ps->echo_input_at_read = echo_input_at_read;
+
+  ps->token = token;
+  ps->token_buffer_size = token_buffer_size;
+  /* Force reallocation on next call to read_token_word */
+  token = 0;
+  token_buffer_size = 0;
+
+  return (ps);
+}
+
+void
+restore_parser_state (ps)
+     sh_parser_state_t *ps;
+{
+  if (ps == 0)
+    return;
+
+  parser_state = ps->parser_state;
+  if (ps->token_state)
+    {
+      restore_token_state (ps->token_state);
+      free (ps->token_state);
+    }
+
+  shell_input_line_terminator = ps->input_line_terminator;
+  eof_encountered = ps->eof_encountered;
+
+  prompt_string_pointer = ps->prompt_string_pointer;
+
+  current_command_line_count = ps->current_command_line_count;
+
+#if defined (HISTORY)
+  remember_on_history = ps->remember_on_history;
+#  if defined (BANG_HISTORY)
+  history_expansion_inhibited = ps->history_expansion_inhibited;
+#  endif
+#endif
+
+  last_command_exit_value = ps->last_command_exit_value;
+#if defined (ARRAY_VARS)
+  restore_pipestatus_array (ps->pipestatus);
+#endif
+
+  last_shell_builtin = ps->last_shell_builtin;
+  this_shell_builtin = ps->this_shell_builtin;
+
+  expand_aliases = ps->expand_aliases;
+  echo_input_at_read = ps->echo_input_at_read;
+
+  FREE (token);
+  token = ps->token;
+  token_buffer_size = ps->token_buffer_size;
+}
+
+sh_input_line_state_t *
+save_input_line_state (ls)
+     sh_input_line_state_t *ls;
+{
+  if (ls == 0)
+    ls = (sh_input_line_state_t *)xmalloc (sizeof (sh_input_line_state_t));
+  if (ls == 0)
+    return ((sh_input_line_state_t *)NULL);
+
+  ls->input_line = shell_input_line;
+  ls->input_line_size = shell_input_line_size;
+  ls->input_line_len = shell_input_line_len;
+  ls->input_line_index = shell_input_line_index;
+
+  /* force reallocation */
+  shell_input_line = 0;
+  shell_input_line_size = shell_input_line_len = shell_input_line_index = 0;
+
+  return ls;
+}
+
+void
+restore_input_line_state (ls)
+     sh_input_line_state_t *ls;
+{
+  FREE (shell_input_line);
+  shell_input_line = ls->input_line;
+  shell_input_line_size = ls->input_line_size;
+  shell_input_line_len = ls->input_line_len;
+  shell_input_line_index = ls->input_line_index;
+
+  set_line_mbstate ();
+}
+
+/************************************************
+ *                                             *
+ *     MULTIBYTE CHARACTER HANDLING            *
+ *                                             *
+ ************************************************/
+
+#if defined (HANDLE_MULTIBYTE)
+static void
+set_line_mbstate ()
+{
+  int c;
+  size_t i, previ, len;
+  mbstate_t mbs, prevs;
+  size_t mbclen;
+
+  if (shell_input_line == NULL)
+    return;
+  len = strlen (shell_input_line);     /* XXX - shell_input_line_len ? */
+  FREE (shell_input_line_property);
+  shell_input_line_property = (char *)xmalloc (len + 1);
+
+  memset (&prevs, '\0', sizeof (mbstate_t));
+  for (i = previ = 0; i < len; i++)
+    {
+      mbs = prevs;
+
+      c = shell_input_line[i];
+      if (c == EOF)
+       {
+         size_t j;
+         for (j = i; j < len; j++)
+           shell_input_line_property[j] = 1;
+         break;
+       }
+
+      mbclen = mbrlen (shell_input_line + previ, i - previ + 1, &mbs);
+      if (mbclen == 1 || mbclen == (size_t)-1)
+       {
+         mbclen = 1;
+         previ = i + 1;
+       }
+      else if (mbclen == (size_t)-2)
+        mbclen = 0;
+      else if (mbclen > 1)
+       {
+         mbclen = 0;
+         previ = i + 1;
+         prevs = mbs;
+       }
+      else
+       {
+         /* XXX - what to do if mbrlen returns 0? (null wide character) */
+         size_t j;
+         for (j = i; j < len; j++)
+           shell_input_line_property[j] = 1;
+         break;
+       }
+
+      shell_input_line_property[i] = mbclen;
+    }
+}
+#endif /* HANDLE_MULTIBYTE */
index a3327ed533ecb6da1db4063fe94a20452dcf6fa1..606effea1fb4591df00aac1501633109eb9e7ef4 100644 (file)
@@ -183,6 +183,7 @@ ITEMLIST it_variables = { LIST_DYNAMIC, it_init_variables, (STRINGLIST *)0 };
 
 COMPSPEC *pcomp_curcs;
 const char *pcomp_curcmd;
+const char *pcomp_curtxt;
 
 #ifdef DEBUG
 /* Debugging code */
@@ -753,6 +754,15 @@ pcomp_filename_completion_function (text, state)
             quoted strings. */
          dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
        }
+      /* Intended to solve a mismatched assumption by bash-completion.  If
+        the text to be completed is empty, but bash-completion turns it into
+        a quoted string ('') assuming that this code will dequote it before
+        calling readline, do the dequoting. */
+      else if (iscompgen && iscompleting &&
+              pcomp_curtxt && *pcomp_curtxt == 0 &&
+              text && (*text == '\'' || *text == '"') && text[1] == text[0] && text[2] == 0 && 
+              rl_filename_dequoting_function)
+         dfn = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character);
       else
        dfn = savestring (text);
     }
@@ -1522,7 +1532,7 @@ gen_progcomp_completions (ocmd, cmd, word, start, end, foundp, retryp, lastcs)
      COMPSPEC **lastcs;
 {
   COMPSPEC *cs, *oldcs;
-  const char *oldcmd;
+  const char *oldcmd, *oldtxt;
   STRINGLIST *ret;
 
   cs = progcomp_search (ocmd);
@@ -1545,14 +1555,17 @@ gen_progcomp_completions (ocmd, cmd, word, start, end, foundp, retryp, lastcs)
 
   oldcs = pcomp_curcs;
   oldcmd = pcomp_curcmd;
+  oldtxt = pcomp_curtxt;
 
   pcomp_curcs = cs;
   pcomp_curcmd = cmd;
+  pcomp_curtxt = word;
 
   ret = gen_compspec_completions (cs, cmd, word, start, end, foundp);
 
   pcomp_curcs = oldcs;
   pcomp_curcmd = oldcmd;
+  pcomp_curtxt = oldtxt;
 
   /* We need to conditionally handle setting *retryp here */
   if (retryp)
diff --git a/tests/misc/regress/log.orig b/tests/misc/regress/log.orig
new file mode 100644 (file)
index 0000000..c1f1e19
--- /dev/null
@@ -0,0 +1,50 @@
+:; ./shx
+
+sh:
+<&$fd  ok
+nlbq   Mon Aug  3 02:45:00 EDT 1992
+bang   geoff
+quote  712824302
+setbq  defmsgid=<1992Aug3.024502.6176@host>
+bgwait sleep done... wait 6187
+
+
+bash:
+<&$fd  ok
+nlbq   Mon Aug  3 02:45:09 EDT 1992
+bang   geoff
+quote  712824311
+setbq  defmsgid=<1992Aug3.024512.6212@host>
+bgwait sleep done... wait 6223
+
+
+ash:
+<&$fd  shx1: 4: Syntax error: Bad fd number
+nlbq   Mon Aug  3 02:45:19 EDT 1992
+bang   geoff
+quote  getdate: `"now"' not a valid date
+
+setbq  defmsgid=<1992Aug3.` echo 024521
+bgwait sleep done... wait 6241
+
+
+ksh:
+<&$fd  ok
+nlbq   ./shx: 6248 Memory fault - core dumped
+bang   geoff
+quote  getdate: `"now"' not a valid date
+
+setbq  defmsgid=<1992Aug3.024530.6257@host>
+bgwait no such job: 6265
+wait 6265
+sleep done... 
+
+zsh:
+<&$fd  ok
+nlbq   Mon Aug 3 02:45:36 EDT 1992
+bang   shx3: event not found: /s/ [4]
+quote  712824337
+setbq  defmsgid=<..6290@host>
+bgwait shx7: unmatched " [9]
+sleep done... 
+:; 
diff --git a/tests/misc/regress/shx.orig b/tests/misc/regress/shx.orig
new file mode 100644 (file)
index 0000000..4b3bf2b
--- /dev/null
@@ -0,0 +1,10 @@
+#! /bin/sh
+for cmd in sh bash ash ksh zsh
+do
+       echo
+       echo $cmd:
+       for demo in shx?
+       do
+               $cmd $demo
+       done
+done
diff --git a/trap.c b/trap.c
index edce31ab9ba90926abe03f88920d5f20ac526a88..56e3ef6420ec360a1d3f895dd8fdd6aade0241c7 100644 (file)
--- a/trap.c
+++ b/trap.c
@@ -89,6 +89,8 @@ extern int line_number;
 extern int sigalrm_seen;
 extern procenv_t alrmbuf;
 
+extern volatile int from_return_trap;
+
 extern char *this_command_name;
 extern sh_builtin_func_t *this_shell_builtin;
 extern procenv_t wait_intr_buf;
@@ -951,8 +953,8 @@ _run_trap_internal (sig, tag)
 #if defined (ARRAY_VARS)
       restore_pipestatus_array (ps);
 #endif
-      running_trap = 0;
 
+      running_trap = 0;
       sigmodes[sig] &= ~SIG_INPROGRESS;
 
       if (sigmodes[sig] & SIG_CHANGED)
@@ -973,7 +975,12 @@ _run_trap_internal (sig, tag)
          return_catch_value = trap_exit_value;
          COPY_PROCENV (save_return_catch, return_catch);
          if (function_code)
-           longjmp (return_catch, 1);
+           {
+#if 0
+             from_return_trap = sig == RETURN_TRAP;
+#endif
+             longjmp (return_catch, 1);
+           }
        }
     }
 
diff --git a/trap.c~ b/trap.c~
new file mode 100644 (file)
index 0000000..31ae080
--- /dev/null
+++ b/trap.c~
@@ -0,0 +1,1270 @@
+/* trap.c -- Not the trap command, but useful functions for manipulating
+   those objects.  The trap command is in builtins/trap.def. */
+
+/* Copyright (C) 1987-2013 Free Software Foundation, Inc.
+
+   This file is part of GNU Bash, the Bourne Again SHell.
+
+   Bash is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   Bash is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with Bash.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "config.h"
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif
+
+#include "bashtypes.h"
+#include "bashansi.h"
+
+#include <stdio.h>
+#include <errno.h>
+
+#include "bashintl.h"
+
+#include <signal.h>
+
+#include "trap.h"
+
+#include "shell.h"
+#include "flags.h"
+#include "input.h"     /* for save_token_state, restore_token_state */
+#include "jobs.h"
+#include "signames.h"
+#include "builtins.h"
+#include "builtins/common.h"
+#include "builtins/builtext.h"
+
+#if defined (READLINE)
+#  include <readline/readline.h>
+#  include "bashline.h"
+#endif
+
+#ifndef errno
+extern int errno;
+#endif
+
+/* Flags which describe the current handling state of a signal. */
+#define SIG_INHERITED   0x0    /* Value inherited from parent. */
+#define SIG_TRAPPED     0x1    /* Currently trapped. */
+#define SIG_HARD_IGNORE 0x2    /* Signal was ignored on shell entry. */
+#define SIG_SPECIAL     0x4    /* Treat this signal specially. */
+#define SIG_NO_TRAP     0x8    /* Signal cannot be trapped. */
+#define SIG_INPROGRESS 0x10    /* Signal handler currently executing. */
+#define SIG_CHANGED    0x20    /* Trap value changed in trap handler. */
+#define SIG_IGNORED    0x40    /* The signal is currently being ignored. */
+
+#define SPECIAL_TRAP(s)        ((s) == EXIT_TRAP || (s) == DEBUG_TRAP || (s) == ERROR_TRAP || (s) == RETURN_TRAP)
+
+/* An array of such flags, one for each signal, describing what the
+   shell will do with a signal.  DEBUG_TRAP == NSIG; some code below
+   assumes this. */
+static int sigmodes[BASH_NSIG];
+
+static void free_trap_command __P((int));
+static void change_signal __P((int, char *));
+
+static int _run_trap_internal __P((int, char *));
+
+static void free_trap_string __P((int));
+static void reset_signal __P((int));
+static void restore_signal __P((int));
+static void reset_or_restore_signal_handlers __P((sh_resetsig_func_t *));
+
+/* Variables used here but defined in other files. */
+extern int last_command_exit_value;
+extern int line_number;
+
+extern int sigalrm_seen;
+extern procenv_t alrmbuf;
+
+extern volatile int from_return_trap;
+
+extern char *this_command_name;
+extern sh_builtin_func_t *this_shell_builtin;
+extern procenv_t wait_intr_buf;
+extern int return_catch_flag, return_catch_value;
+extern int subshell_level;
+extern WORD_LIST *subst_assign_varlist;
+
+/* The list of things to do originally, before we started trapping. */
+SigHandler *original_signals[NSIG];
+
+/* For each signal, a slot for a string, which is a command to be
+   executed when that signal is received.  The slot can also contain
+   DEFAULT_SIG, which means do whatever you were going to do before
+   you were so rudely interrupted, or IGNORE_SIG, which says ignore
+   this signal. */
+char *trap_list[BASH_NSIG];
+
+/* A bitmap of signals received for which we have trap handlers. */
+int pending_traps[NSIG];
+
+/* Set to the number of the signal we're running the trap for + 1.
+   Used in execute_cmd.c and builtins/common.c to clean up when
+   parse_and_execute does not return normally after executing the
+   trap command (e.g., when `return' is executed in the trap command). */
+int running_trap;
+
+/* Set to last_command_exit_value before running a trap. */
+int trap_saved_exit_value;
+
+/* The (trapped) signal received while executing in the `wait' builtin */
+int wait_signal_received;
+
+int trapped_signal_received;
+
+#define GETORIGSIG(sig) \
+  do { \
+    original_signals[sig] = (SigHandler *)set_signal_handler (sig, SIG_DFL); \
+    set_signal_handler (sig, original_signals[sig]); \
+    if (original_signals[sig] == SIG_IGN) \
+      sigmodes[sig] |= SIG_HARD_IGNORE; \
+  } while (0)
+
+#define SETORIGSIG(sig,handler) \
+  do { \
+    original_signals[sig] = handler; \
+    if (original_signals[sig] == SIG_IGN) \
+      sigmodes[sig] |= SIG_HARD_IGNORE; \
+  } while (0)
+
+#define GET_ORIGINAL_SIGNAL(sig) \
+  if (sig && sig < NSIG && original_signals[sig] == IMPOSSIBLE_TRAP_HANDLER) \
+    GETORIGSIG(sig)
+
+void
+initialize_traps ()
+{
+  register int i;
+
+  initialize_signames();
+
+  trap_list[EXIT_TRAP] = trap_list[DEBUG_TRAP] = trap_list[ERROR_TRAP] = trap_list[RETURN_TRAP] = (char *)NULL;
+  sigmodes[EXIT_TRAP] = sigmodes[DEBUG_TRAP] = sigmodes[ERROR_TRAP] = sigmodes[RETURN_TRAP] = SIG_INHERITED;
+  original_signals[EXIT_TRAP] = IMPOSSIBLE_TRAP_HANDLER;
+
+  for (i = 1; i < NSIG; i++)
+    {
+      pending_traps[i] = 0;
+      trap_list[i] = (char *)DEFAULT_SIG;
+      sigmodes[i] = SIG_INHERITED;     /* XXX - only set, not used */
+      original_signals[i] = IMPOSSIBLE_TRAP_HANDLER;
+    }
+
+  /* Show which signals are treated specially by the shell. */
+#if defined (SIGCHLD)
+  GETORIGSIG (SIGCHLD);
+  sigmodes[SIGCHLD] |= (SIG_SPECIAL | SIG_NO_TRAP);
+#endif /* SIGCHLD */
+
+  GETORIGSIG (SIGINT);
+  sigmodes[SIGINT] |= SIG_SPECIAL;
+
+#if defined (__BEOS__)
+  /* BeOS sets SIGINT to SIG_IGN! */
+  original_signals[SIGINT] = SIG_DFL;
+  sigmodes[SIGINT] &= ~SIG_HARD_IGNORE;
+#endif
+
+  GETORIGSIG (SIGQUIT);
+  sigmodes[SIGQUIT] |= SIG_SPECIAL;
+
+  if (interactive)
+    {
+      GETORIGSIG (SIGTERM);
+      sigmodes[SIGTERM] |= SIG_SPECIAL;
+    }
+}
+
+#ifdef DEBUG
+/* Return a printable representation of the trap handler for SIG. */
+static char *
+trap_handler_string (sig)
+     int sig;
+{
+  if (trap_list[sig] == (char *)DEFAULT_SIG)
+    return "DEFAULT_SIG";
+  else if (trap_list[sig] == (char *)IGNORE_SIG)
+    return "IGNORE_SIG";
+  else if (trap_list[sig] == (char *)IMPOSSIBLE_TRAP_HANDLER)
+    return "IMPOSSIBLE_TRAP_HANDLER";
+  else if (trap_list[sig])
+    return trap_list[sig];
+  else
+    return "NULL";
+}
+#endif
+
+/* Return the print name of this signal. */
+char *
+signal_name (sig)
+     int sig;
+{
+  char *ret;
+
+  /* on cygwin32, signal_names[sig] could be null */
+  ret = (sig >= BASH_NSIG || sig < 0 || signal_names[sig] == NULL)
+       ? _("invalid signal number")
+       : signal_names[sig];
+
+  return ret;
+}
+
+/* Turn a string into a signal number, or a number into
+   a signal number.  If STRING is "2", "SIGINT", or "INT",
+   then (int)2 is returned.  Return NO_SIG if STRING doesn't
+   contain a valid signal descriptor. */
+int
+decode_signal (string, flags)
+     char *string;
+     int flags;
+{
+  intmax_t sig;
+  char *name;
+
+  if (legal_number (string, &sig))
+    return ((sig >= 0 && sig < NSIG) ? (int)sig : NO_SIG);
+
+  /* A leading `SIG' may be omitted. */
+  for (sig = 0; sig < BASH_NSIG; sig++)
+    {
+      name = signal_names[sig];
+      if (name == 0 || name[0] == '\0')
+       continue;
+
+      /* Check name without the SIG prefix first case sensitively or
+        insensitively depending on whether flags includes DSIG_NOCASE */
+      if (STREQN (name, "SIG", 3))
+       {
+         name += 3;
+
+         if ((flags & DSIG_NOCASE) && strcasecmp (string, name) == 0)
+           return ((int)sig);
+         else if ((flags & DSIG_NOCASE) == 0 && strcmp (string, name) == 0)
+           return ((int)sig);
+         /* If we can't use the `SIG' prefix to match, punt on this
+            name now. */
+         else if ((flags & DSIG_SIGPREFIX) == 0)
+           continue;
+       }
+
+      /* Check name with SIG prefix case sensitively or insensitively
+        depending on whether flags includes DSIG_NOCASE */
+      name = signal_names[sig];
+      if ((flags & DSIG_NOCASE) && strcasecmp (string, name) == 0)
+       return ((int)sig);
+      else if ((flags & DSIG_NOCASE) == 0 && strcmp (string, name) == 0)
+       return ((int)sig);
+    }
+
+  return (NO_SIG);
+}
+
+/* Non-zero when we catch a trapped signal. */
+static int catch_flag;
+
+void
+run_pending_traps ()
+{
+  register int sig;
+  int old_exit_value;
+  WORD_LIST *save_subst_varlist;
+  sh_parser_state_t pstate;
+#if defined (ARRAY_VARS)
+  ARRAY *ps;
+#endif
+
+  if (catch_flag == 0)         /* simple optimization */
+    return;
+
+  if (running_trap > 0)
+    {
+#if defined (DEBUG)
+      internal_warning ("run_pending_traps: recursive invocation while running trap for signal %d", running_trap-1);
+#endif
+#if 0
+      return;                  /* no recursive trap invocations */
+#else
+      ;
+#endif
+    }
+
+  catch_flag = trapped_signal_received = 0;
+
+  /* Preserve $? when running trap. */
+  old_exit_value = last_command_exit_value;
+#if defined (ARRAY_VARS)
+  ps = save_pipestatus_array ();
+#endif
+
+  for (sig = 1; sig < NSIG; sig++)
+    {
+      /* XXX this could be made into a counter by using
+        while (pending_traps[sig]--) instead of the if statement. */
+      if (pending_traps[sig])
+       {
+         if (running_trap == sig+1)
+           /*continue*/;
+
+         running_trap = sig + 1;
+
+         if (sig == SIGINT)
+           {
+             pending_traps[sig] = 0;   /* XXX */
+             run_interrupt_trap ();
+             CLRINTERRUPT;
+           }
+#if defined (JOB_CONTROL) && defined (SIGCHLD)
+         else if (sig == SIGCHLD &&
+                  trap_list[SIGCHLD] != (char *)IMPOSSIBLE_TRAP_HANDLER &&
+                  (sigmodes[SIGCHLD] & SIG_INPROGRESS) == 0)
+           {
+             sigmodes[SIGCHLD] |= SIG_INPROGRESS;
+             run_sigchld_trap (pending_traps[sig]);    /* use as counter */
+             sigmodes[SIGCHLD] &= ~SIG_INPROGRESS;
+           }
+         else if (sig == SIGCHLD &&
+                  trap_list[SIGCHLD] == (char *)IMPOSSIBLE_TRAP_HANDLER &&
+                  (sigmodes[SIGCHLD] & SIG_INPROGRESS) != 0)
+           {
+             /* This can happen when run_pending_traps is called while
+                running a SIGCHLD trap handler. */
+             running_trap = 0;
+             /* want to leave pending_traps[SIGCHLD] alone here */
+             continue;                                 /* XXX */
+           }
+         else if (sig == SIGCHLD && (sigmodes[SIGCHLD] & SIG_INPROGRESS))
+           {
+             /* whoops -- print warning? */
+             running_trap = 0;         /* XXX */
+             /* want to leave pending_traps[SIGCHLD] alone here */
+             continue;
+           }
+#endif
+         else if (trap_list[sig] == (char *)DEFAULT_SIG ||
+                  trap_list[sig] == (char *)IGNORE_SIG ||
+                  trap_list[sig] == (char *)IMPOSSIBLE_TRAP_HANDLER)
+           {
+             /* This is possible due to a race condition.  Say a bash
+                process has SIGTERM trapped.  A subshell is spawned
+                using { list; } & and the parent does something and kills
+                the subshell with SIGTERM.  It's possible for the subshell
+                to set pending_traps[SIGTERM] to 1 before the code in
+                execute_cmd.c eventually calls restore_original_signals
+                to reset the SIGTERM signal handler in the subshell.  The
+                next time run_pending_traps is called, pending_traps[SIGTERM]
+                will be 1, but the trap handler in trap_list[SIGTERM] will
+                be invalid (probably DEFAULT_SIG, but it could be IGNORE_SIG).
+                Unless we catch this, the subshell will dump core when
+                trap_list[SIGTERM] == DEFAULT_SIG, because DEFAULT_SIG is
+                usually 0x0. */
+             internal_warning (_("run_pending_traps: bad value in trap_list[%d]: %p"),
+                               sig, trap_list[sig]);
+             if (trap_list[sig] == (char *)DEFAULT_SIG)
+               {
+                 internal_warning (_("run_pending_traps: signal handler is SIG_DFL, resending %d (%s) to myself"), sig, signal_name (sig));
+                 kill (getpid (), sig);
+               }
+           }
+         else
+           {
+             /* XXX - should we use save_parser_state/restore_parser_state? */
+             save_parser_state (&pstate);
+             save_subst_varlist = subst_assign_varlist;
+             subst_assign_varlist = 0;
+
+#if defined (JOB_CONTROL)
+             save_pipeline (1);        /* XXX only provides one save level */
+#endif
+             /* XXX - set pending_traps[sig] = 0 here? */
+             pending_traps[sig] = 0;
+             evalstring (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
+#if defined (JOB_CONTROL)
+             restore_pipeline (1);
+#endif
+
+             subst_assign_varlist = save_subst_varlist;
+             restore_parser_state (&pstate);
+           }
+
+         pending_traps[sig] = 0;       /* XXX - move before evalstring? */
+         running_trap = 0;
+       }
+    }
+
+#if defined (ARRAY_VARS)
+  restore_pipestatus_array (ps);
+#endif
+  last_command_exit_value = old_exit_value;
+}
+
+sighandler
+trap_handler (sig)
+     int sig;
+{
+  int oerrno;
+
+  if ((sigmodes[sig] & SIG_TRAPPED) == 0)
+    {
+#if defined (DEBUG)
+      internal_warning ("trap_handler: signal %d: signal not trapped", sig);
+#endif
+      SIGRETURN (0);
+    }
+
+  if ((sig >= NSIG) ||
+      (trap_list[sig] == (char *)DEFAULT_SIG) ||
+      (trap_list[sig] == (char *)IGNORE_SIG))
+    programming_error (_("trap_handler: bad signal %d"), sig);
+  else
+    {
+      oerrno = errno;
+#if defined (MUST_REINSTALL_SIGHANDLERS)
+#  if defined (JOB_CONTROL) && defined (SIGCHLD)
+      if (sig != SIGCHLD)
+#  endif /* JOB_CONTROL && SIGCHLD */
+      set_signal_handler (sig, trap_handler);
+#endif /* MUST_REINSTALL_SIGHANDLERS */
+
+      catch_flag = 1;
+      pending_traps[sig]++;
+
+      trapped_signal_received = sig;
+
+      if (this_shell_builtin && (this_shell_builtin == wait_builtin))
+       {
+         wait_signal_received = sig;
+         if (interrupt_immediately)
+           longjmp (wait_intr_buf, 1);
+       }
+
+#if defined (READLINE)
+      /* Set the event hook so readline will call it after the signal handlers
+        finish executing, so if this interrupted character input we can get
+        quick response. */
+      if (RL_ISSTATE (RL_STATE_SIGHANDLER) && interrupt_immediately == 0)
+        bashline_set_event_hook ();
+#endif
+
+      if (interrupt_immediately)
+       run_pending_traps ();
+
+      errno = oerrno;
+    }
+
+  SIGRETURN (0);
+}
+
+int
+first_pending_trap ()
+{
+  register int i;
+
+  for (i = 1; i < NSIG; i++)
+    if (pending_traps[i])
+      return i;
+  return -1;
+}
+
+int
+any_signals_trapped ()
+{
+  register int i;
+
+  for (i = 1; i < NSIG; i++)
+    if (sigmodes[i] & SIG_TRAPPED)
+      return i;
+  return -1;
+}
+
+void
+check_signals ()
+{
+  CHECK_ALRM;          /* set by the read builtin */
+  QUIT;
+}
+
+/* Convenience functions the rest of the shell can use */
+void
+check_signals_and_traps ()
+{
+  check_signals ();
+
+  run_pending_traps ();
+}
+
+#if defined (JOB_CONTROL) && defined (SIGCHLD)
+
+#ifdef INCLUDE_UNUSED
+/* Make COMMAND_STRING be executed when SIGCHLD is caught. */
+void
+set_sigchld_trap (command_string)
+     char *command_string;
+{
+  set_signal (SIGCHLD, command_string);
+}
+#endif
+
+/* Make COMMAND_STRING be executed when SIGCHLD is caught iff SIGCHLD
+   is not already trapped.  IMPOSSIBLE_TRAP_HANDLER is used as a sentinel
+   to make sure that a SIGCHLD trap handler run via run_sigchld_trap can
+   reset the disposition to the default and not have the original signal
+   accidentally restored, undoing the user's command. */
+void
+maybe_set_sigchld_trap (command_string)
+     char *command_string;
+{
+  if ((sigmodes[SIGCHLD] & SIG_TRAPPED) == 0 && trap_list[SIGCHLD] == (char *)IMPOSSIBLE_TRAP_HANDLER)
+    set_signal (SIGCHLD, command_string);
+}
+
+/* Temporarily set the SIGCHLD trap string to IMPOSSIBLE_TRAP_HANDLER.  Used
+   as a sentinel in run_sigchld_trap and maybe_set_sigchld_trap to see whether
+   or not a SIGCHLD trap handler reset SIGCHLD disposition to the default. */
+void
+set_impossible_sigchld_trap ()
+{
+  restore_default_signal (SIGCHLD);
+  change_signal (SIGCHLD, (char *)IMPOSSIBLE_TRAP_HANDLER);
+  sigmodes[SIGCHLD] &= ~SIG_TRAPPED;   /* maybe_set_sigchld_trap checks this */
+}
+
+/* Act as if we received SIGCHLD NCHILD times and increment
+   pending_traps[SIGCHLD] by that amount.  This allows us to still run the
+   SIGCHLD trap once for each exited child. */
+void
+queue_sigchld_trap (nchild)
+     int nchild;
+{
+  if (nchild > 0)
+    {
+      catch_flag = 1;
+      pending_traps[SIGCHLD] += nchild;
+      trapped_signal_received = SIGCHLD;
+    }
+}
+#endif /* JOB_CONTROL && SIGCHLD */
+
+void
+set_debug_trap (command)
+     char *command;
+{
+  set_signal (DEBUG_TRAP, command);
+}
+
+void
+set_error_trap (command)
+     char *command;
+{
+  set_signal (ERROR_TRAP, command);
+}
+
+void
+set_return_trap (command)
+     char *command;
+{
+  set_signal (RETURN_TRAP, command);
+}
+
+#ifdef INCLUDE_UNUSED
+void
+set_sigint_trap (command)
+     char *command;
+{
+  set_signal (SIGINT, command);
+}
+#endif
+
+/* Reset the SIGINT handler so that subshells that are doing `shellsy'
+   things, like waiting for command substitution or executing commands
+   in explicit subshells ( ( cmd ) ), can catch interrupts properly. */
+SigHandler *
+set_sigint_handler ()
+{
+  if (sigmodes[SIGINT] & SIG_HARD_IGNORE)
+    return ((SigHandler *)SIG_IGN);
+
+  else if (sigmodes[SIGINT] & SIG_IGNORED)
+    return ((SigHandler *)set_signal_handler (SIGINT, SIG_IGN)); /* XXX */
+
+  else if (sigmodes[SIGINT] & SIG_TRAPPED)
+    return ((SigHandler *)set_signal_handler (SIGINT, trap_handler));
+
+  /* The signal is not trapped, so set the handler to the shell's special
+     interrupt handler. */
+  else if (interactive)        /* XXX - was interactive_shell */
+    return (set_signal_handler (SIGINT, sigint_sighandler));
+  else
+    return (set_signal_handler (SIGINT, termsig_sighandler));
+}
+
+/* Return the correct handler for signal SIG according to the values in
+   sigmodes[SIG]. */
+SigHandler *
+trap_to_sighandler (sig)
+     int sig;
+{
+  if (sigmodes[sig] & (SIG_IGNORED|SIG_HARD_IGNORE))
+    return (SIG_IGN);
+  else if (sigmodes[sig] & SIG_TRAPPED)
+    return (trap_handler);
+  else
+    return (SIG_DFL);
+}
+
+/* Set SIG to call STRING as a command. */
+void
+set_signal (sig, string)
+     int sig;
+     char *string;
+{
+  sigset_t set, oset;
+
+  if (SPECIAL_TRAP (sig))
+    {
+      change_signal (sig, savestring (string));
+      if (sig == EXIT_TRAP && interactive == 0)
+       initialize_terminating_signals ();
+      return;
+    }
+
+  /* A signal ignored on entry to the shell cannot be trapped or reset, but
+     no error is reported when attempting to do so.  -- Posix.2 */
+  if (sigmodes[sig] & SIG_HARD_IGNORE)
+    return;
+
+  /* Make sure we have original_signals[sig] if the signal has not yet
+     been trapped. */
+  if ((sigmodes[sig] & SIG_TRAPPED) == 0)
+    {
+      /* If we aren't sure of the original value, check it. */
+      if (original_signals[sig] == IMPOSSIBLE_TRAP_HANDLER)
+        GETORIGSIG (sig);
+      if (original_signals[sig] == SIG_IGN)
+       return;
+    }
+
+  /* Only change the system signal handler if SIG_NO_TRAP is not set.
+     The trap command string is changed in either case.  The shell signal
+     handlers for SIGINT and SIGCHLD run the user specified traps in an
+     environment in which it is safe to do so. */
+  if ((sigmodes[sig] & SIG_NO_TRAP) == 0)
+    {
+      BLOCK_SIGNAL (sig, set, oset);
+      change_signal (sig, savestring (string));
+      set_signal_handler (sig, trap_handler);
+      UNBLOCK_SIGNAL (oset);
+    }
+  else
+    change_signal (sig, savestring (string));
+}
+
+static void
+free_trap_command (sig)
+     int sig;
+{
+  if ((sigmodes[sig] & SIG_TRAPPED) && trap_list[sig] &&
+      (trap_list[sig] != (char *)IGNORE_SIG) &&
+      (trap_list[sig] != (char *)DEFAULT_SIG) &&
+      (trap_list[sig] != (char *)IMPOSSIBLE_TRAP_HANDLER))
+    free (trap_list[sig]);
+}
+
+/* If SIG has a string assigned to it, get rid of it.  Then give it
+   VALUE. */
+static void
+change_signal (sig, value)
+     int sig;
+     char *value;
+{
+  if ((sigmodes[sig] & SIG_INPROGRESS) == 0)
+    free_trap_command (sig);
+  trap_list[sig] = value;
+
+  sigmodes[sig] |= SIG_TRAPPED;
+  if (value == (char *)IGNORE_SIG)
+    sigmodes[sig] |= SIG_IGNORED;
+  else
+    sigmodes[sig] &= ~SIG_IGNORED;
+  if (sigmodes[sig] & SIG_INPROGRESS)
+    sigmodes[sig] |= SIG_CHANGED;
+}
+
+void
+get_original_signal (sig)
+     int sig;
+{
+  /* If we aren't sure the of the original value, then get it. */
+  if (sig > 0 && sig < NSIG && original_signals[sig] == (SigHandler *)IMPOSSIBLE_TRAP_HANDLER)
+    GETORIGSIG (sig);
+}
+
+void
+get_all_original_signals ()
+{
+  register int i;
+
+  for (i = 1; i < NSIG; i++)
+    GET_ORIGINAL_SIGNAL (i);
+}
+
+void
+set_original_signal (sig, handler)
+     int sig;
+     SigHandler *handler;
+{
+  if (sig > 0 && sig < NSIG && original_signals[sig] == (SigHandler *)IMPOSSIBLE_TRAP_HANDLER)
+    SETORIGSIG (sig, handler);
+}
+
+/* Restore the default action for SIG; i.e., the action the shell
+   would have taken before you used the trap command.  This is called
+   from trap_builtin (), which takes care to restore the handlers for
+   the signals the shell treats specially. */
+void
+restore_default_signal (sig)
+     int sig;
+{
+  if (SPECIAL_TRAP (sig))
+    {
+      if ((sig != DEBUG_TRAP && sig != ERROR_TRAP && sig != RETURN_TRAP) ||
+         (sigmodes[sig] & SIG_INPROGRESS) == 0)
+       free_trap_command (sig);
+      trap_list[sig] = (char *)NULL;
+      sigmodes[sig] &= ~SIG_TRAPPED;
+      if (sigmodes[sig] & SIG_INPROGRESS)
+       sigmodes[sig] |= SIG_CHANGED;
+      return;
+    }
+
+  GET_ORIGINAL_SIGNAL (sig);
+
+  /* A signal ignored on entry to the shell cannot be trapped or reset, but
+     no error is reported when attempting to do so.  Thanks Posix.2. */
+  if (sigmodes[sig] & SIG_HARD_IGNORE)
+    return;
+
+  /* If we aren't trapping this signal, don't bother doing anything else. */
+  /* We special-case SIGCHLD and IMPOSSIBLE_TRAP_HANDLER (see above) as a
+     sentinel to determine whether or not disposition is reset to the default
+     while the trap handler is executing. */
+  if (((sigmodes[sig] & SIG_TRAPPED) == 0) &&
+      (sig != SIGCHLD || (sigmodes[sig] & SIG_INPROGRESS) == 0 || trap_list[sig] != (char *)IMPOSSIBLE_TRAP_HANDLER))
+    return;
+
+  /* Only change the signal handler for SIG if it allows it. */
+  if ((sigmodes[sig] & SIG_NO_TRAP) == 0)
+    set_signal_handler (sig, original_signals[sig]);
+
+  /* Change the trap command in either case. */
+  change_signal (sig, (char *)DEFAULT_SIG);
+
+  /* Mark the signal as no longer trapped. */
+  sigmodes[sig] &= ~SIG_TRAPPED;
+}
+
+/* Make this signal be ignored. */
+void
+ignore_signal (sig)
+     int sig;
+{
+  if (SPECIAL_TRAP (sig) && ((sigmodes[sig] & SIG_IGNORED) == 0))
+    {
+      change_signal (sig, (char *)IGNORE_SIG);
+      return;
+    }
+
+  GET_ORIGINAL_SIGNAL (sig);
+
+  /* A signal ignored on entry to the shell cannot be trapped or reset.
+     No error is reported when the user attempts to do so. */
+  if (sigmodes[sig] & SIG_HARD_IGNORE)
+    return;
+
+  /* If already trapped and ignored, no change necessary. */
+  if (sigmodes[sig] & SIG_IGNORED)
+    return;
+
+  /* Only change the signal handler for SIG if it allows it. */
+  if ((sigmodes[sig] & SIG_NO_TRAP) == 0)
+    set_signal_handler (sig, SIG_IGN);
+
+  /* Change the trap command in either case. */
+  change_signal (sig, (char *)IGNORE_SIG);
+}
+
+/* Handle the calling of "trap 0".  The only sticky situation is when
+   the command to be executed includes an "exit".  This is why we have
+   to provide our own place for top_level to jump to. */
+int
+run_exit_trap ()
+{
+  char *trap_command;
+  int code, function_code, retval;
+#if defined (ARRAY_VARS)
+  ARRAY *ps;
+#endif
+
+  trap_saved_exit_value = last_command_exit_value;
+#if defined (ARRAY_VARS)
+  ps = save_pipestatus_array ();
+#endif
+  function_code = 0;
+
+  /* Run the trap only if signal 0 is trapped and not ignored, and we are not
+     currently running in the trap handler (call to exit in the list of
+     commands given to trap 0). */
+  if ((sigmodes[EXIT_TRAP] & SIG_TRAPPED) &&
+      (sigmodes[EXIT_TRAP] & (SIG_IGNORED|SIG_INPROGRESS)) == 0)
+    {
+      trap_command = savestring (trap_list[EXIT_TRAP]);
+      sigmodes[EXIT_TRAP] &= ~SIG_TRAPPED;
+      sigmodes[EXIT_TRAP] |= SIG_INPROGRESS;
+
+      retval = trap_saved_exit_value;
+      running_trap = 1;
+
+      code = setjmp_nosigs (top_level);
+
+      /* If we're in a function, make sure return longjmps come here, too. */
+      if (return_catch_flag)
+       function_code = setjmp_nosigs (return_catch);
+
+      if (code == 0 && function_code == 0)
+       {
+         reset_parser ();
+         parse_and_execute (trap_command, "exit trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
+       }
+      else if (code == ERREXIT)
+       retval = last_command_exit_value;
+      else if (code == EXITPROG)
+       retval = last_command_exit_value;
+      else if (function_code != 0)
+        retval = return_catch_value;
+      else
+       retval = trap_saved_exit_value;
+
+      running_trap = 0;
+      return retval;
+    }
+
+#if defined (ARRAY_VARS)
+  restore_pipestatus_array (ps);
+#endif
+  return (trap_saved_exit_value);
+}
+
+void
+run_trap_cleanup (sig)
+     int sig;
+{
+  sigmodes[sig] &= ~(SIG_INPROGRESS|SIG_CHANGED);
+}
+
+#define RECURSIVE_SIG(s) (SPECIAL_TRAP(s) == 0)
+
+/* Run a trap command for SIG.  SIG is one of the signals the shell treats
+   specially.  Returns the exit status of the executed trap command list. */
+static int
+_run_trap_internal (sig, tag)
+     int sig;
+     char *tag;
+{
+  char *trap_command, *old_trap;
+  int trap_exit_value, *token_state;
+  volatile int save_return_catch_flag, function_code;
+  int flags;
+  procenv_t save_return_catch;
+  WORD_LIST *save_subst_varlist;
+  sh_parser_state_t pstate;
+#if defined (ARRAY_VARS)
+  ARRAY *ps;
+#endif
+
+  trap_exit_value = function_code = 0;
+  /* Run the trap only if SIG is trapped and not ignored, and we are not
+     currently executing in the trap handler. */
+  if ((sigmodes[sig] & SIG_TRAPPED) && ((sigmodes[sig] & SIG_IGNORED) == 0) &&
+      (trap_list[sig] != (char *)IMPOSSIBLE_TRAP_HANDLER) &&
+#if 0
+      /* Uncomment this to allow some special signals to recursively execute
+        trap handlers. */
+      (RECURSIVE_SIG (sig) || (sigmodes[sig] & SIG_INPROGRESS) == 0))
+#else
+      ((sigmodes[sig] & SIG_INPROGRESS) == 0))
+#endif
+    {
+      old_trap = trap_list[sig];
+      sigmodes[sig] |= SIG_INPROGRESS;
+      sigmodes[sig] &= ~SIG_CHANGED;           /* just to be sure */
+      trap_command =  savestring (old_trap);
+
+      running_trap = sig + 1;
+
+#if defined (ARRAY_VARS)
+      ps = save_pipestatus_array ();
+#endif
+
+      save_parser_state (&pstate);
+      save_subst_varlist = subst_assign_varlist;
+      subst_assign_varlist = 0;
+
+#if defined (JOB_CONTROL)
+      if (sig != DEBUG_TRAP)   /* run_debug_trap does this */
+       save_pipeline (1);      /* XXX only provides one save level */
+#endif
+
+      /* If we're in a function, make sure return longjmps come here, too. */
+      save_return_catch_flag = return_catch_flag;
+      if (return_catch_flag)
+       {
+         COPY_PROCENV (return_catch, save_return_catch);
+         function_code = setjmp_nosigs (return_catch);
+       }
+
+      flags = SEVAL_NONINT|SEVAL_NOHIST;
+      if (sig != DEBUG_TRAP && sig != RETURN_TRAP && sig != ERROR_TRAP)
+       flags |= SEVAL_RESETLINE;
+      if (function_code == 0)
+       parse_and_execute (trap_command, tag, flags);
+
+      trap_exit_value = last_command_exit_value;
+
+#if defined (JOB_CONTROL)
+      if (sig != DEBUG_TRAP)   /* run_debug_trap does this */
+       restore_pipeline (1);
+#endif
+
+      subst_assign_varlist = save_subst_varlist;
+      restore_parser_state (&pstate);
+
+#if defined (ARRAY_VARS)
+      restore_pipestatus_array (ps);
+#endif
+
+      running_trap = 0;
+      sigmodes[sig] &= ~SIG_INPROGRESS;
+
+      if (sigmodes[sig] & SIG_CHANGED)
+       {
+#if 0
+         /* Special traps like EXIT, DEBUG, RETURN are handled explicitly in
+            the places where they can be changed using unwind-protects.  For
+            example, look at execute_cmd.c:execute_function(). */
+         if (SPECIAL_TRAP (sig) == 0)
+#endif
+           free (old_trap);
+         sigmodes[sig] &= ~SIG_CHANGED;
+       }
+
+      if (save_return_catch_flag)
+       {
+         return_catch_flag = save_return_catch_flag;
+         return_catch_value = trap_exit_value;
+         COPY_PROCENV (save_return_catch, return_catch);
+         if (function_code)
+           {
+             from_return_trap = sig == RETURN_TRAP;
+             longjmp (return_catch, 1);
+           }
+       }
+    }
+
+  return trap_exit_value;
+}
+
+int
+run_debug_trap ()
+{
+  int trap_exit_value;
+  pid_t save_pgrp;
+  int save_pipe[2];
+
+  /* XXX - question:  should the DEBUG trap inherit the RETURN trap? */
+  trap_exit_value = 0;
+  if ((sigmodes[DEBUG_TRAP] & SIG_TRAPPED) && ((sigmodes[DEBUG_TRAP] & SIG_IGNORED) == 0) && ((sigmodes[DEBUG_TRAP] & SIG_INPROGRESS) == 0))
+    {
+#if defined (JOB_CONTROL)
+      save_pgrp = pipeline_pgrp;
+      pipeline_pgrp = 0;
+      save_pipeline (1);
+#  if defined (PGRP_PIPE)
+      save_pgrp_pipe (save_pipe, 1);
+#  endif
+      stop_making_children ();
+#endif
+
+      trap_exit_value = _run_trap_internal (DEBUG_TRAP, "debug trap");
+
+#if defined (JOB_CONTROL)
+      pipeline_pgrp = save_pgrp;
+      restore_pipeline (1);
+#  if defined (PGRP_PIPE)
+      close_pgrp_pipe ();
+      restore_pgrp_pipe (save_pipe);
+#  endif
+      if (pipeline_pgrp > 0)
+       give_terminal_to (pipeline_pgrp, 1);
+      notify_and_cleanup ();
+#endif
+      
+#if defined (DEBUGGER)
+      /* If we're in the debugger and the DEBUG trap returns 2 while we're in
+        a function or sourced script, we force a `return'. */
+      if (debugging_mode && trap_exit_value == 2 && return_catch_flag)
+       {
+         return_catch_value = trap_exit_value;
+         longjmp (return_catch, 1);
+       }
+#endif
+    }
+  return trap_exit_value;
+}
+
+void
+run_error_trap ()
+{
+  if ((sigmodes[ERROR_TRAP] & SIG_TRAPPED) && ((sigmodes[ERROR_TRAP] & SIG_IGNORED) == 0) && (sigmodes[ERROR_TRAP] & SIG_INPROGRESS) == 0)
+    _run_trap_internal (ERROR_TRAP, "error trap");
+}
+
+void
+run_return_trap ()
+{
+  int old_exit_value;
+
+#if 0
+  if ((sigmodes[DEBUG_TRAP] & SIG_TRAPPED) && (sigmodes[DEBUG_TRAP] & SIG_INPROGRESS))
+    return;
+#endif
+
+  if ((sigmodes[RETURN_TRAP] & SIG_TRAPPED) && ((sigmodes[RETURN_TRAP] & SIG_IGNORED) == 0) && (sigmodes[RETURN_TRAP] & SIG_INPROGRESS) == 0)
+    {
+      old_exit_value = last_command_exit_value;
+      _run_trap_internal (RETURN_TRAP, "return trap");
+      last_command_exit_value = old_exit_value;
+    }
+}
+
+/* Run a trap set on SIGINT.  This is called from throw_to_top_level (), and
+   declared here to localize the trap functions. */
+void
+run_interrupt_trap ()
+{
+  _run_trap_internal (SIGINT, "interrupt trap");
+}
+
+/* Free all the allocated strings in the list of traps and reset the trap
+   values to the default.  Intended to be called from subshells that want
+   to complete work done by reset_signal_handlers upon execution of a
+   subsequent `trap' command that changes a signal's disposition.  We need
+   to make sure that we duplicate the behavior of
+   reset_or_restore_signal_handlers and not change the disposition of signals
+   that are set to be ignored. */
+void
+free_trap_strings ()
+{
+  register int i;
+
+  for (i = 0; i < BASH_NSIG; i++)
+    {
+      if (trap_list[i] != (char *)IGNORE_SIG)
+       free_trap_string (i);
+    }
+  trap_list[DEBUG_TRAP] = trap_list[EXIT_TRAP] = trap_list[ERROR_TRAP] = trap_list[RETURN_TRAP] = (char *)NULL;
+}
+
+/* Free a trap command string associated with SIG without changing signal
+   disposition.  Intended to be called from free_trap_strings()  */
+static void
+free_trap_string (sig)
+     int sig;
+{
+  change_signal (sig, (char *)DEFAULT_SIG);
+  sigmodes[sig] &= ~SIG_TRAPPED;
+}
+
+/* Reset the handler for SIG to the original value but leave the trap string
+   in place. */
+static void
+reset_signal (sig)
+     int sig;
+{
+  set_signal_handler (sig, original_signals[sig]);
+  sigmodes[sig] &= ~SIG_TRAPPED;
+}
+
+/* Set the handler signal SIG to the original and free any trap
+   command associated with it. */
+static void
+restore_signal (sig)
+     int sig;
+{
+  set_signal_handler (sig, original_signals[sig]);
+  change_signal (sig, (char *)DEFAULT_SIG);
+  sigmodes[sig] &= ~SIG_TRAPPED;
+}
+
+static void
+reset_or_restore_signal_handlers (reset)
+     sh_resetsig_func_t *reset;
+{
+  register int i;
+
+  /* Take care of the exit trap first */
+  if (sigmodes[EXIT_TRAP] & SIG_TRAPPED)
+    {
+      sigmodes[EXIT_TRAP] &= ~SIG_TRAPPED;
+      if (reset != reset_signal)
+       {
+         free_trap_command (EXIT_TRAP);
+         trap_list[EXIT_TRAP] = (char *)NULL;
+       }
+    }
+
+  for (i = 1; i < NSIG; i++)
+    {
+      if (sigmodes[i] & SIG_TRAPPED)
+       {
+         if (trap_list[i] == (char *)IGNORE_SIG)
+           set_signal_handler (i, SIG_IGN);
+         else
+           (*reset) (i);
+       }
+      else if (sigmodes[i] & SIG_SPECIAL)
+       (*reset) (i);
+    }
+
+  /* Command substitution and other child processes don't inherit the
+     debug, error, or return traps.  If we're in the debugger, and the
+     `functrace' or `errtrace' options have been set, then let command
+     substitutions inherit them.  Let command substitution inherit the
+     RETURN trap if we're in the debugger and tracing functions. */
+  if (function_trace_mode == 0)
+    {
+      sigmodes[DEBUG_TRAP] &= ~SIG_TRAPPED;
+      sigmodes[RETURN_TRAP] &= ~SIG_TRAPPED;
+    }
+  if (error_trace_mode == 0)
+    sigmodes[ERROR_TRAP] &= ~SIG_TRAPPED;
+}
+
+/* Reset trapped signals to their original values, but don't free the
+   trap strings.  Called by the command substitution code and other places
+   that create a "subshell environment". */
+void
+reset_signal_handlers ()
+{
+  reset_or_restore_signal_handlers (reset_signal);
+}
+
+/* Reset all trapped signals to their original values.  Signals set to be
+   ignored with trap '' SIGNAL should be ignored, so we make sure that they
+   are.  Called by child processes after they are forked. */
+void
+restore_original_signals ()
+{
+  reset_or_restore_signal_handlers (restore_signal);
+}
+
+/* If a trap handler exists for signal SIG, then call it; otherwise just
+   return failure.  Returns 1 if it called the trap handler. */
+int
+maybe_call_trap_handler (sig)
+     int sig;
+{
+  /* Call the trap handler for SIG if the signal is trapped and not ignored. */
+  if ((sigmodes[sig] & SIG_TRAPPED) && ((sigmodes[sig] & SIG_IGNORED) == 0))
+    {
+      switch (sig)
+       {
+       case SIGINT:
+         run_interrupt_trap ();
+         break;
+       case EXIT_TRAP:
+         run_exit_trap ();
+         break;
+       case DEBUG_TRAP:
+         run_debug_trap ();
+         break;
+       case ERROR_TRAP:
+         run_error_trap ();
+         break;
+       default:
+         trap_handler (sig);
+         break;
+       }
+      return (1);
+    }
+  else
+    return (0);
+}
+
+int
+signal_is_trapped (sig)
+     int sig;
+{
+  return (sigmodes[sig] & SIG_TRAPPED);
+}
+
+int
+signal_is_pending (sig)
+     int sig;
+{
+  return (pending_traps[sig]);
+}
+
+int
+signal_is_special (sig)
+     int sig;
+{
+  return (sigmodes[sig] & SIG_SPECIAL);
+}
+
+int
+signal_is_ignored (sig)
+     int sig;
+{
+  return (sigmodes[sig] & SIG_IGNORED);
+}
+
+int
+signal_is_hard_ignored (sig)
+     int sig;
+{
+  return (sigmodes[sig] & SIG_HARD_IGNORE);
+}
+
+void
+set_signal_hard_ignored (sig)
+     int sig;
+{
+  sigmodes[sig] |= SIG_HARD_IGNORE;
+  original_signals[sig] = SIG_IGN;
+}
+
+void
+set_signal_ignored (sig)
+     int sig;
+{
+  original_signals[sig] = SIG_IGN;
+}
+
+int
+signal_in_progress (sig)
+     int sig;
+{
+  return (sigmodes[sig] & SIG_INPROGRESS);
+}